2012-04-20 44 views
0

我试图创建一个使用GET方法的C#网页,以便我可以将表单数据加入书签,将它发送给其他人等,但是将表单方法更改为包含VIEWSTATE的查询字符串中的GET结果。我可以取出runat =服务器标签(如提到here),但我不知道如何设置我的表单域的值。我不介意手动持续他们,但我不知道如何。如何在GET中使用表单来利用查询字符串,但查询字符串中没有VIEWSTATE?

那么,我该如何利用viewstate,但保持它不在我的查询字符串中,或​​者在没有runat = server的情况下访问窗体控件​​?

+1

只是禁用您的网页的视图状态,但保持runat =“服务器”上的控件 – 2012-04-20 22:11:10

回答

0

如果您正在通过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,如果他们刷新页面,他们不会得到有关重新发送数据到服务器的烦人消息。