【问题标题】:Page EventValidation is True error?Page EventValidation is True 错误?
【发布时间】:2011-11-19 06:41:07
【问题描述】:

我通过使用 Jquery 的 Input sumbit type(Html tag) onclick 事件做了两个列表框和值交换。值很容易从一个列表框交换到另一个,但是当我从列表框中存储选定的值时,选择的值给了我.. 首先我得到错误 Page Eventvalidation=true 所以我在谷歌上搜索并使用

解决了这个问题
   protected override void Render(System.Web.UI.HtmlTextWriter writer)
    {
                Page.ClientScript.RegisterForEventValidation(lsttolimo.UniqueID,this.ToString());
                base.Render(writer);
    }

尚未找到解决方案。比我使用 UpdatePanel 并在触发器中添加每个控件但仍然找不到解决方案之后

【问题讨论】:

    标签: c# asp.net html visual-studio visual-studio-2010


    【解决方案1】:

    首先让我们了解 EventValidation 在 .NET 世界中的含义。

    当你创建一些服务器控件,那么应该被渲染成HTML,这样它们就可以在浏览器中显示出来。现在,考虑在 DropDownList 中有 10 个项目。这 10 个项目将在 <select> 标记内呈现为 <option> 标记(它们被转换为 HTML 等效控件)。

    现在,ASP.NET 对这 10 个值进行加密,并将它们也添加到 EventValidation 隐藏字段中。这意味着您现在已经将这 10 个值 两次 发送到浏览器。现在,每当有人回发表单时,ASP.NET 都会获取发布的值(这 10 项中的一项被回发)。然后它解密这 10 个加密值(现在它有 10 + 1 个值)。它检查过帐值是否是 10 个项目之一。如果是,那么 ASP.NET 会确保一切正常。但如果不是,那么它就知道有人试图愚弄它。

    现在,假设您有一个国家/地区列表,并且您只接受来自 3 个国家/地区的用户,例如美国、英国和澳大利亚。但是,有人来到您的注册页面,了解 HTML 并创建另一个具有相同字段和相同国家列表的表单。但这次他还将另一个国家的名称添加到您的列表中(比如伊朗)。

    如果您没有打开 EventValidation,并且您没有明确检查国家/地区,那么您只是被愚弄而接受伊朗为有效国家/地区。这称为 form spoofing

    现在,既然您有两个列表,并且您交换了它们的值,当然,.NET 认为它被愚弄了。建议你关闭EventValidation(这是比较简单的方法,但更容易出现安全问题)并自行检查。

    要关闭事件验证,只需将其添加到您的 web.config 文件中:

    <system.web>
        <pages enableEventValidation="false"
    </system.web>
    

    【讨论】:

    • @Saeed...感谢您的指导。我确实 enableEventvalidation="false" 那个时间错误消失了但是当我从列表框中选择项目(这是从一个列表框交换到另一个列表框)并去存储它但选择的值为空。
    • 我在 ListItem 的 Foreach 循环中通过调试器检查了 Code By debugger,时间 seelctedvalue 为空.....我不知道那里在做什么??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    相关资源
    最近更新 更多