1

我正在尝试使用 ClientScriptManager.RegisterForEventValidation 来注册一个隐藏字段和值,我正在使用 ClientScriptManager.RegisterHiddenField 添加。我在渲染事件期间这样做。我没有收到任何错误,但 ASP.NET 2.0 似乎没有验证该字段。我可以使用 Firefox 和 Firebug 更改值或删除整个字段客户端,并且 ASP.NET 不会像应有的那样抛出错误。

来自自定义 Page 类的示例代码:

protected override void Render(HtmlTextWriter writer)
{
    ClientScript.RegisterHiddenField("stuff", "things");
    ClientScript.RegisterForEventValidation("stuff", "things");
    base.Render(writer);
}

隐藏字段已添加到页面,但 ASP.NET 不会在回发时验证该字段或值。我错过了什么?

4

1 回答 1

2

我了解您要执行的操作,但使用事件验证 API 并不合适,因为它旨在验证客户端引发的回发或回调事件对于目标服务器控件是否正确,例如,确保单击由正确的按钮处理,或者检查下拉列表上的更改事件是否不是服务器最初“已知”的值。

在您的代码中,您正在直接向客户端生成一个隐藏字段,因此服务器无法控制在回发时引用。即使您在服务器页面上使用了隐藏字段控件,您仍然无法验证字段值,因为该控件不会生成回发事件(用户无法与之交互,因此没有服务器验证的事件)。

最简单的解决方案是使用 ViewState 来存储字段的值,然后在回发时验证该字段的发布值是否等于存储在 ViewState 中的值。ViewState 默认情况下是加密的,因此它是存储不应在客户端更改的数据的安全位置。

于 2009-04-09T03:58:41.683 回答