我正在开发一个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提供的工具一样.有一个更好的方法吗?
这样做的最好方法是使用方法设置的表单来获取:
<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事件中的所有数据