C# ClientScriptManager.RegisterForEventValidation with HiddenField

C# ClientScriptManager.RegisterForEventValidation with HiddenField,c#,asp.net,eventvalidation,clientscriptmanager,C#,Asp.net,Eventvalidation,Clientscriptmanager,我正在尝试使用ClientScriptManager.RegisterForEventValidation注册一个隐藏字段和我正在使用ClientScriptManager.RegisterHiddenField添加的值。我将在渲染事件期间执行此操作。我没有收到任何错误,但ASP.NET 2.0似乎没有验证该字段。我可以使用Firefox和Firebug更改值或删除整个clientside字段,ASP.NET不会像应该的那样抛出错误 自定义页面类的示例代码: protected override

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

自定义页面类的示例代码:

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

隐藏字段将添加到页面中,但ASP.NET不会在回发时验证字段或值。我遗漏了什么?

我理解您试图做什么,但使用事件验证API并不真正合适,因为它旨在验证客户端引发的回发或回调事件对于目标服务器控件是否正确,例如,确保通过正确的按钮处理单击,或者检查下拉列表上的更改事件是否不是针对服务器最初“未知”的值

在代码中,您直接向客户机生成一个隐藏字段,因此服务器无法在回发时引用任何控件。即使在服务器页面上使用了隐藏字段控件,也无法验证字段值,因为该控件不生成回发事件(用户无法与其交互,因此服务器无法验证事件)


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

感谢您清除此问题。这次我不能使用viewstate,因为我将页面状态存储在数据库中,而不是发送到客户端,而这个隐藏值是页面状态的GUID。我只是想确保我正在尽一切可能保护这个功能。