我的产品页面上有一个搜索文本框和按钮(products.aspx
)。单击该按钮,将文本框中的文本与数据库中的产品名称进行比较,并在转发器中显示结果。
当文本框,按钮和转发器都在同一页面上时,我的搜索功能正常工作,但理想情况下,我希望在产品页面上显示文本框和按钮,然后在搜索结果页面上显示转发器( search.aspx
)。
我知道按钮需要将用户重定向到search.aspx以显示结果,但我的代码没有运行,因为products.aspx
上不存在转发器。如何让按钮在另一个页面上运行代码?
protected void btnSearch_Click(object sender, EventArgs e)
{
string searchWord = txtWord.Text;
ZaraEntities db = new ZaraEntities();
var results = db.Products.Where(p => p.Name.Contains(searchWord));
Response.Redirect("~/Search.aspx");
rptrSearch.DataSource = results.ToList();
rptrSearch.DataBind();
litResults.Text = string.Format("<p>Search results for '{0}'. {1} Results found.</p>", txtWord.Text, results.ToList().Count);
}
答案 0 :(得分:3)
大部分代码都属于“Results.aspx”。正如您所述,“Products.aspx”上不存在这些控件,因此无法访问它们。正确的方法是重定向到“Results.aspx”并使用查询条件将查询字符串(或表单参数)传递给“Results.aspx”页面。
Response.Redirect(string.Format("~/Search.aspx?query={0}", searchWord));
然后在“Results.aspx”页面的Load事件处理程序中写下以下内容。
var searchWord = Request.Params[query] as string;
ZaraEntities db = new ZaraEntities();
var results = db.Products.Where(p => p.Name.Contains(searchWord));
rptrSearch.DataSource = results.ToList();
rptrSearch.DataBind()
litResults.Text = string.Format("<p>Search results for '{0}'. {1} Results found.</p>", searchWord, results.ToList().Count);
答案 1 :(得分:0)
对于页面到页面的通信,您可以使用Session。
protected void btnSearch_Click(object sender, EventArgs e) {
Session["searchWord"] = txtWord.Text;
Response.Redirect("~/Search.aspx");
}
然后在Search.aspx上
protected void Page_Load(object sender, EventArgs e) {
string searchWord = Session["searchWord"].ToString();
ZaraEntities db = new ZaraEntities();
var results = db.Products.Where(p => p.Name.Contains(searchWord));
rptrSearch.DataSource = results.ToList();
rptrSearch.DataBind();
litResults.Text = string.Format("<p>Search results for '{0}'. {1} Results found.</p>", txtWord.Text, results.ToList().Count);
}