Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ASP.NET Web Form parameters in URL

I have an ASP.NET page that contain a form that search the page.

Is there any solution so that I can have the search text in the URL?

I want to give the posibility to my clients to copy/paste the search results URL.

like image 563
Radu D Avatar asked Oct 27 '10 14:10

Radu D


People also ask

How to access parameters passed in URL?

Any word after the question mark (?) in a URL is considered to be a parameter which can hold values. The value for the corresponding parameter is given after the symbol "equals" (=). Multiple parameters can be passed through the URL by separating them with multiple "&".

What is QueryString in asp net?

The QueryString collection is used to retrieve the variable values in the HTTP query string.


3 Answers

There might be other better/cleaner/proper ways of doing it, like changing form's action, or changing button's PostBackUrl, but this is what I would do.

  1. Redirect to self with search term appended to query string.
  2. On page load, if query string is not empty, do search.

.aspx:

<asp:Label ID="Label1" runat="server" Text="Search Term:&nbsp;"></asp:Label>
<asp:TextBox ID="txtSearchTerm" runat="server"></asp:TextBox>
<asp:Button ID="btnSearch" runat="server" Text="Search" 
    onclick="btnSearch_Click" />

.cs:

protected void Page_Load(object sender, EventArgs e)
{
    if (Page.IsPostBack)
        return;

    if (!string.IsNullOrEmpty(Request.QueryString["SearchTerm"]))
    {
        string searchTerm = Request.QueryString["SearchTerm"];
        txtSearchTerm.Text = searchTerm;
        DoSearch(searchTerm);
    }
}
protected void btnSearch_Click(object sender, EventArgs e)
{
    if (!string.IsNullOrEmpty(txtSearchTerm.Text.Trim()))
    {
        Response.Redirect("~/Search.aspx?SearchTerm=" + txtSearchTerm.Text.Trim());
    }
}

private void DoSearch(string searchTerm)
{
    //search logic here
    Response.Write("Search result: " + searchTerm);
}
like image 91
bla Avatar answered Oct 05 '22 11:10

bla


After more research abut this topic I think that the javascript solution is the best:

You can access the ACTION attribute of the form using JavaScript.

<form id="myForm" action="Search.aspx" onsubmit="return setAction();">
    <input id="textbox" />
    <input type="submit" value="Submit" />
</form>
<script type="text/javascript">

function setAction()
{
    var myForm = document.getElementById( "myForm" );
    var myText = document.getElementById( "textbox" );

    if (myForm && myForm.action && myText && myText.value != null )
    {
       myForm.action = "Search.aspx?q=" + myText.value;
    }
    return true;
}

</script>

Personally I am not a big fan of JavaScript ... but this does not add an extra request to the server. If you think that this has any drawbacks please let me know.

like image 43
Radu D Avatar answered Oct 05 '22 11:10

Radu D


You can also use jQuery to do the trick, like this:

$(function(){

$('input[type="submit"]').click(function(e){
       e.preventDefault();
       var searchResult = "Search.aspx?q=" + $('input#textbox').val();
       $('form#myForm').attr('action',searchResult);
    });
});
like image 27
Rob Angelier Avatar answered Oct 05 '22 09:10

Rob Angelier