ASP.NET Web Form中的URL参数

6

我有一个包含搜索表单的ASP.NET页面。

是否有任何解决方案,可以将搜索文本放在URL中?

我想要给我的客户提供复制/粘贴搜索结果URL的可能性。


你需要提供更多细节。"包含一个搜索页面的表单"是什么意思并不清楚。 - egrunin
4个回答

13

可能有更好/更干净/更合适的方法来实现,例如更改 表单的操作 或更改按钮的 PostBackUrl,但这是我会做的。

  1. 将搜索词附加到查询字符串中并重定向到当前页面。
  2. 在页面加载时,如果查询字符串不为空,则执行搜索。

.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);
}

我有一点不愿意使用Response.Redirect。这不会影响搜索引擎的排名吗? - Radu D

1

你也可以使用jQuery来完成这个技巧,像这样:

$(function(){

$('input[type="submit"]').click(function(e){
       e.preventDefault();
       var searchResult = "Search.aspx?q=" + $('input#textbox').val();
       $('form#myForm').attr('action',searchResult);
    });
});

1
经过更多关于这个主题的研究,我认为JavaScript解决方案是最好的:
您可以使用JavaScript访问表单的ACTION属性。
<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>

个人而言,我不是 JavaScript 的铁粉... 但这并不会对服务器造成额外的请求。如果您认为这有任何缺点,请告诉我。


0
如果您想要复制/粘贴URL的能力,您需要从表单中获取搜索参数并将其重定向回带有搜索参数的表单,然后读取QueryString值以执行搜索。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接