只能在执行 Render() 的过程中调用 RegisterForEventValidation;

ASP.NET中 提示:“只能在执行 Render() 的过程中调用 RegisterForEventValidation;”

只能在执行 Render() 的过程中调用 RegisterForEventValidation

只需要在ASPX页,加上EnableEventValidation="false"即可,例如:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Preview.aspx.cs" Inherits="WebSite.Person.Preview" EnableEventValidation="false" %>

那么,EnableEventValidation到底是什么呢?

通过字面理解也能够看出来,它是一个启用事件验证的开关,它是asp.net2.0用来防止客户端“欺诈”服务器端的。例如本来输出到客户端的一个事件被触发时需要回发的命令是“__doPostback( 'ctl01$abc ', 'user_1 ')”的,如果采取采取手段把回发参数由   user_1   改为   user_5   了,服务器端会重新核对输出的是不是user_5,发现和这个页面上一个输出的脚本不一致,就会产生这个异常。 

它默认是启用的,一旦将它设置为false,那么就默认取消了这层安全验证,与此同时,我们作为开发人员就需要对相关的功能进行自定义的验证,千万不能按照过去的思路,因为没有考虑这个问题或者是忽略这个欺诈的可能性,写的程序可能会有隐性的漏洞,这时候我们就要多关心我们的代码是否足够健壮和安全。

所以,我个人建议还是尽量不要把EnableEventValidation设置为false。不过,我们有时候根据逻辑业务或者是功能需求,确实要将它设置为false,我们就要多留心了!

我个人推荐在Page上定义EnableEventValidation,而不是在Web.config中定义全局的放弃事件安全验证。

评论 (0) 分享 ()

评论 抢沙发