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

本文关键字:样式 字符串 信息 查询 方法 net asp 位置 | 更新日期: 2023-09-27 18:05:02

我正在开发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>

lnkSearch_Click在数据库上执行查询,然后将结果绑定到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();" />

但是这感觉像是我在刻意避免使用asp.net提供的工具。有更好的方法吗?

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

最好的方法是设置一个方法为get的表单:

<form method="get">

但ASP。. NET需要一个巨大的表单来包装所有的控件,所以不适合你。

另一种实现方法是为Search按钮的click事件创建一个事件处理程序:

protected void SearchButton_Click(object sender, EventArgs e){
    Response.Redirect(Request.RawUrl + "?search=" + Server.UrlEncode(txtSearch.Text));
}
并绑定PageLoad事件中的所有数据

如果你使用。net 4.0,为什么不使用URL路由?我写了这篇文章来解释如何使用这个新特性。

所以你会有一个点击事件来执行你的搜索,然后在搜索结束时(逻辑代码),你可以通过使用URL路由将他们的搜索保存在URL中。您可以使用的另一种方法是会话。我不建议使用cookie,因为它们位于客户端,容易被操纵。你可以使用的最后一个选项是Context。如果你要从一个页面直接跳转到下一个页面,你可以使用页面历史记录。