简体   繁体   中英

ASPX EventValidation error with DropDownList

This must have an obvious solution, but I'm stumped. We are developing an application which is mostly XHR -based, so while we are using .aspx , very little is done with typical controls. However, in a few spots, we are just doing basic "throw this data into a spreadsheet for the user" things with a couple dropdowns for timespan for reports, etc.

The problem is when we use asp:DropDownList controls, it immediately causes any page we put them in to throw Event Validation errors on submit. I have created test pages that do not share the rest of the application's master pages (aka, no JS at all modifying things client side) just to be sure that we don't have some stray JS causing issues.

If I remove the DropDownList in the following example, the button click happens just fine. If I click the button with the page sitting as shown, it throws the Event Validation error .

However , other applications running on the same machine, in 4.0 Integrated app pools, do not exhibit this behavior, so I'm assuming it has something to do with the configuration. The web.config is pretty standard...tried turning httpCompression section off in a desperate attempt, but to no avail.

Does anyone have a suggestion on where to start here? Please remember... There is NO CLIENT SIDE MODIFICATION going on. This is straight from the server to the browser, then 'click' on the ASP-generated button.

Turning off Event Validation in the page directive does eliminate the error, but I'd rather not turn off validation if I can help it.

Environment :

  • Windows 7 Pro
  • IIS 7.5
  • .NET 4.0 Integrated app-pool
  • Error happens in IE9/Chrome/Firefox/Safari

Page :

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

Codebehind :

protected void Page_Load(object sender, EventArgs e) {
    butExport.Click += new EventHandler(butExport_Click);
}

void butExport_Click(object sender, EventArgs e) {
    Syslog("clicked");
}

Form Data (according to Chrome Inspector) :

  • __VIEWSTATE:/wEPDwULLTIwOTUzNjUzOTVkZIiv1cdholWibyWL8h5HASwxedB47NUpctCv8OQc1CWM
  • __EVENTVALIDATION:/wEWAgL0voCyDQKDgcL6CAX34hdaRiHyNiY1xLIh5Pr6aj5q8h8gGG875vMq1SXF
  • ddlDays:30
  • butExport:Export

OK, I started going through my project looking for any possible configuration item that could be causing issues. Turns out a co-worker used a WebControlAdapter and applied it to all DropDownLists and during the Render, did not use RegisterForEventValidation .

I don't particularly like the adapter, but in the interest of moving on with life, I left it there and while rendering bound items, I'm calling Page.ClientScript.RegisterForEventValidation for each value. This has fixed every problematic DropDownList we have in the application.

Thanks for the suggestions, all.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM