我正在尝试创建一个使用GET方法的C#网页,因此我可以将表单数据加入书签,通过电子邮件发送给其他人等,但是将表单方法更改为GET会导致包含VIEWSTATE的查询字符串。我可以取出runat = server标签(如上所述here),但后来我不知道如何设置表单字段的值。我不介意手动保持它们,但我无法弄清楚如何。
那么,我如何利用viewstate但将其保留在我的查询字符串之外,或者在没有runat = server的情况下访问表单控件?
答案 0 :(得分:0)
例如,如果您在网页上使用搜索/过滤器表单,那么这是我在自己的代码中多次使用的模式。当用户提交一个按钮来处理他们在表单中输入的内容时,我让它像往常一样作为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管理的内置表单POST(包括View State)。此外,当用户填写表单并按下按钮时,他们有一个可链接的URL,即使它是一个POST,如果他们刷新页面,他们也不会收到关于将数据重新发送到服务器的恼人消息