我正在尝试创建一个使用 GET 方法的 C# 网页,以便我可以为表单数据添加书签、通过电子邮件将其发送给其他人等,但是将表单方法更改为 GET 会导致包含 VIEWSTATE 的查询字符串。我可以取出 runat=server 标签(如此处所述),但我不知道如何设置表单字段的值。我不介意手动持久化它们,但我不知道如何。
那么,我如何利用视图状态但将其保留在我的查询字符串之外,或者在没有 runat=server 的情况下访问表单控件?
我正在尝试创建一个使用 GET 方法的 C# 网页,以便我可以为表单数据添加书签、通过电子邮件将其发送给其他人等,但是将表单方法更改为 GET 会导致包含 VIEWSTATE 的查询字符串。我可以取出 runat=server 标签(如此处所述),但我不知道如何设置表单字段的值。我不介意手动持久化它们,但我不知道如何。
那么,我如何利用视图状态但将其保留在我的查询字符串之外,或者在没有 runat=server 的情况下访问表单控件?
例如,如果您在网页上使用想要通过 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 管理的内置表单 POST(包括视图状态)。此外,当用户填写表单并按下按钮时,他们有一个可链接的 url,即使它是一个 POST,如果他们刷新页面,他们也不会收到关于将数据重新发送到服务器的烦人消息.