如果您正在通过GET使用网页上的搜索/过滤器表单,以下是我在自己的代码中多次使用的模式。当用户提交一个按钮来处理他们在表单中输入的内容时,我会像普通邮件一样将它作为POST后台打开。然后我手动建立一个GET请求,并重定向到它:
protected void BtnSubmit_Click(object sender, EventArgs e)
{
var query =
"?filter1=" + TxtFilter1.Text +
"&filter2=" + TxtFilter2.Text +
"&filter3=" + TxtFilter3.Text; // etc.
Response.Redirect(query);
}
然后在页的负荷,我处理在查询字符串中的条目,以预填充的页面上的相关表单控件:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
TxtFilter1.Text = Request.QueryString["filter1"] ?? "";
TxtFilter2.Text = Request.QueryString["filter2"] ?? "";
TxtFilter3.Text = Request.QueryString["filter3"] ?? "";
// etc.
}
}
这使我可以控制实际进入QueryString的内容,而不会干扰由ASP.Net(包括View State)管理的内置表单POST。此外,当用户填写表单并按下按钮时,他们有一个可链接的url,即使它是一个POST,如果他们刷新页面,他们不会得到有关重新发送数据到服务器的烦人消息。
只是禁用您的网页的视图状态,但保持runat =“服务器”上的控件 – 2012-04-20 22:11:10