页面 EventValidation 是 True 错误?

Jig*_*put 1 html c# asp.net visual-studio-2010 visual-studio

我通过使用 Jquery 的 Input sumbit type(Html tag) onclick 事件做了两个列表框和值交换。我收到错误页面 Eventvalidation=true 所以我在谷歌上搜索并通过使用解决这个问题

   protected override void Render(System.Web.UI.HtmlTextWriter writer)
    {
                Page.ClientScript.RegisterForEventValidation(lsttolimo.UniqueID,this.ToString());
                base.Render(writer);
    }
Run Code Online (Sandbox Code Playgroud)

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

Sae*_*ati 5

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

当您创建一些服务器控件时,应该将它们呈现为 HTML,以便它们可以在浏览器中显示。现在,考虑在 DropDownList 中有 10 个项目。这 10 个项目将作为<option>标签内的<select>标签呈现(它们被转换为 HTML 等效控件)。

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

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

如果您没有打开 EventValidation,并且您没有明确检查该国家/地区,那么您只是被愚弄了接受伊朗作为有效国家/地区。这称为形式欺骗

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

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

<system.web>
    <pages enableEventValidation="false"
</system.web>
Run Code Online (Sandbox Code Playgroud)