ASP.NET / C#在两个页面之间运行代码

时间:2015-03-09 21:33:34

标签: c# asp.net redirect

我的产品页面上有一个搜索文本框和按钮(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);       
}

2 个答案:

答案 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);

}