4

这必须有一个明显的解决方案,但我很难过。我们正在开发一个主要XHR基于 - 的应用程序,所以当我们使用.aspx时,很少使用典型的控件。但是,在某些情况下,我们只是在做基本的“将这些数据放入电子表格中供用户使用”的事情,其中​​有几个下拉菜单用于报告的时间跨度等。

问题是当我们使用asp:DropDownList控件时,它会立即导致我们放入它们的任何页面在提交时抛出事件验证错误。我创建了不共享应用程序母版页的其余部分的测试页面(也就是,根本没有 JS 修改客户端的东西)只是为了确保我们没有一些杂散的 JS 导致问题。

如果我在以下示例中删除了DropDownList,按钮单击就会发生。如果我点击页面如图所示的按钮,它会抛出Event Validation error.

但是,在同一台机器上运行的其他应用程序,在 4.0 集成应用程序池中,没有表现出这种行为,所以我假设它与配置有关。这web.config是相当标准的......试图httpCompression在绝望的尝试中关闭部分,但无济于事。

有没有人建议从哪里开始?请记住...没有客户端修改正在进行。这直接从服务器到浏览器,然后在 ASP 生成的按钮上“单击”。

在页面指令中关闭事件验证确实消除了错误,但如果我能提供帮助,我宁愿不关闭验证。

环境

  • 视窗 7 专业版
  • IIS 7.5
  • .NET 4.0 集成应用程序池
  • IE9/Chrome/Firefox/Safari 中发生错误

页面

<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)

  • __VIEWSTATE:/wEPDwULLTIwOTUzNjUzOTVkZIiv1cdholWibyWL8h5HASwxedB47NUpctCv8OQc1CWM
  • __EVENTVALIDATION:/wEWAgL0voCyDQKDgcL6CAX34hdaRiHyNiY1xLIh5Pr6aj5q8h8gGG875vMq1SXF
  • ddl天数:30
  • 但是导出:导出
4

1 回答 1

0

好的,我开始浏览我的项目,寻找任何可能导致问题的配置项。结果是一位同事使用了 aWebControlAdapter并将其应用于所有DropDownLists,而在渲染期间,没有使用RegisterForEventValidation.

我不是特别喜欢适配器,但为了继续生活,我把它留在那里,在渲染绑定项目时,我调用Page.ClientScript.RegisterForEventValidation了每个值。这解决DropDownList了我们在应用程序中遇到的所有问题。

谢谢大家的建议。

于 2012-06-25T21:21:09.610 回答