这必须有一个明显的解决方案,但我很难过。我们正在开发一个主要基于 XHR
的应用程序,因此当我们使用 .aspx
时,典型控件几乎没有完成。然而,在一些地方,我们只是在做一些基本的“将这些数据放入用户的电子表格中”的事情,还有一些报告时间跨度的下拉菜单等。
问题是当我们使用 asp:DropDownList
控件时,它会立即导致我们放入它们的任何页面在提交时抛出事件验证错误。我创建了不共享应用程序母版页的其余部分的测试页面(也就是,根本没有 JS 修改客户端的内容)只是为了确保我们没有一些杂散的 JS 导致问题。
如果我在下面的例子中删除了 DropDownList
,按钮点击会发生得很好。如果我单击如图所示页面的按钮,它会抛出 Event Validation error
。
但是,在同一台机器上运行的其他应用程序,在 4.0 集成应用程序池中,不会表现出这种行为,所以我假设它与配置有关。 web.config
是非常标准的......尝试在绝望的尝试中关闭 httpCompression
部分,但无济于事。
有没有人有关于从哪里开始的建议?请记住... 没有客户端修改 正在进行。这是直接从服务器到浏览器,然后“单击”ASP 生成的按钮。
在页面指令中关闭事件验证确实消除了错误,但如果我能帮上忙,我宁愿不关闭验证。
环境 :
页面 :
<html>
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:DropDownList ID="ddlDays" runat="server">
<asp:ListItem Text="30 Days" Value="30"></asp:ListItem>
<asp:ListItem Text="60 Days" Value="60"></asp:ListItem>
<asp:ListItem Text="90 Days" Value="90"></asp:ListItem>
</asp:DropDownList>
<asp:Button ID="butExport" Text="Export" runat="server" />
</div>
</form>
</body>
</html>
代码隐藏 :
protected void Page_Load(object sender, EventArgs e) {
butExport.Click += new EventHandler(butExport_Click);
}
void butExport_Click(object sender, EventArgs e) {
Syslog("clicked");
}
表单数据(根据 Chrome Inspector) :
最佳答案
好的,我开始检查我的项目,寻找任何可能导致问题的配置项。结果发现一位同事使用了 WebControlAdapter
并将其应用于所有 DropDownLists
并且在渲染期间没有使用 RegisterForEventValidation
。
我不是特别喜欢适配器,但为了继续生活,我把它留在那里,在渲染绑定(bind)项目时,我为每个值调用 Page.ClientScript.RegisterForEventValidation
。这已经修复了我们在应用程序中所有有问题的 DropDownList
。
谢谢大家的建议。
关于asp.net - DropDownList 的 ASPX EventValidation 错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11146110/