实现搜索页面

时间:2017-05-19 07:27:16

标签: asp.net search

我是ASP.Net的新手并试图在我的项目中实现搜索页面。

我创建了一个简单的 search.aspx

<asp:TextBox runat="server" ID="txtSearch" MaxLength="250"/>
<asp:LinkButton ID="lnkSearch" runat="server" Text="Search" OnClick="Search_Click" ClientIDMode="Static" />
<asp:Repeater ID="rep" runat="server" >
....
</asp:Repeater>

search.aspx.cs

    protected void Page_Load(object sender, EventArgs e)
    {
        txtSearch.Text = Request.Params["q"].ToString();
        BindRepeater(); //reads Request.Params["q"] and fetches data

        txtSearch.Focus();

        this.Page.Form.DefaultButton = this.lnkSearch.UniqueID;
    }

    protected void Search_Click(object sender, EventArgs e)
    {
        Response.Redirect("/Search.aspx?q=" + txtSearch.Text);
    }

问题是当我在txtSearch中键入内容并按Enter或单击搜索时,页面将使用旧查询字符串和旧搜索结果重新加载,似乎txtSearch.Text使用旧查询值更新在点击Search_Click之前

例如如果我在地址栏中输入search.aspx?q=apple,页面会返回正确的结果,而txtSearch的文字=&#34; apple&#34; ..如果我输入green apple并按Enter键,页面会返回apple个结果,而txtSearch的文字=&#34; apple&#34;,链接也是search.aspx?q=apple < / p>

我试过

  • AutoPostBack="True|False"用于TextBox

  • if (!IsPostBack) txtSearch.Text = Request.Params["q"].ToString();

但我无法使用它,因为我发布回同一页面,不是吗?

我也尝试了

if (IsPostBack && txtSearch.Text != Request.Params["q"].ToString()) 
       txtSearch.Text = Request.Params["q"].ToString();

1 个答案:

答案 0 :(得分:0)

这对我来说似乎是一种奇怪的方式。

我的偏好是在事件处理程序本身中使用搜索逻辑,而不是实现这种奇怪的回发循环。

protected void Page_Load(object sender, EventArgs e)
{
    if (Page.IsPostBack == false)
    {
        // If passed in on first entry to the page
        var searchQuery = Reqest.Params["q"];
        if (String.IsNullOrWhitespace(searchQuery) == false)
        {
            txtSearch.Text = searchQuery;
            Search_Click(null, null);
        }
    }

    txtSearch.Focus();

    this.Page.Form.DefaultButton = this.lnkSearch.UniqueID;
}

protected void Search_Click(object sender, EventArgs e)
{
    // Pass the value of the search to the repeater
    BindRepeater(txtSearch.Text);
}

请注意,我已将搜索文本传递给BindRepeater,因此您必须更新它才能使用参数值而不是查询字符串