我是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();
答案 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
,因此您必须更新它才能使用参数值而不是查询字符串