将查询字符串式信息放在asp.net的位置栏中的正确方法

Oli*_*ver 2 c# asp.net

我正在开发一个asp.net 4.0应用程序.其中一个站点是允许用户搜索数据库中的东西.完成的页面如下所示:

<asp:Panel ID="pnlSearch" runat="server" DefaultButton="lnkSearch" cssclass="searchbar box">
    <span id="searchFor"><strong>Search for</strong></span>
    <asp:TextBox ID="txtSearch" runat="server"></asp:TextBox>                 
    <asp:LinkButton ID="lnkSearch" runat="server" Text="Search" onclick="lnkSearch_Click"></asp:LinkButton>              
</asp:Panel>
Run Code Online (Sandbox Code Playgroud)

lnkSearch_Click对数据库执行查询,然后将结果绑定到a asp:Repeater.

这一切都有效,但是存在一个问题:用户没有更改URL,因此用户无法保存查询以供日后使用,也无法链接到他们的朋友.

我可以通过做一些类似的事来解决这个问题:

<script>
    function doSearch() { location.href='~/defaultpro.aspx?search='+escape($('txtSearch').value);
</script>
<a ID="lnkSearch" href="javascript:void(0);" Text="Search" onclick="doSearch();" />
Run Code Online (Sandbox Code Playgroud)

但这感觉就像避免使用asp.net提供的工具一样.有一个更好的方法吗?

Sly*_*Sly 5

这样做的最好方法是使用方法设置的表单来获取:

<form method="get">
Run Code Online (Sandbox Code Playgroud)

但ASP.NET需要一个包含所有控件的巨大表单,因此它不适合您.

您可以通过其他方式实现此操作,即为"搜索"按钮的单击事件创建事件处理程序:

protected void SearchButton_Click(object sender, EventArgs e){
    Response.Redirect(Request.RawUrl + "?search=" + Server.UrlEncode(txtSearch.Text));
}
Run Code Online (Sandbox Code Playgroud)

并绑定PageLoad事件中的所有数据