Фон
У меня есть ASP.net UserControl, который представляет собой простую форму ввода пользователя.Он использует UpdatePanel и UpdaetProgress для отображения «рабочего» GIF после того, как они нажимают кнопку «Отправить».Мы получили сообщения о том, что кнопка отправки иногда ничего не делает в FireFox, IE 8 и Safari.Посмотрев на это, я не смог воспроизвести никаких проблем в IE, но обнаружил, что в FireFox кнопка отправки получила следующую ошибку сценария, которая препятствовала обратной передаче:
Error: Sys.WebForms.PageRequestManagerServerErrorException: Invalid postback or callback argument. Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.
Source File: http://localhost:1127/ScriptResource.axd?d=ZYU-uPMJ_AcQgBrmkW_WO13JlNZSAb9cMptxJsQIH1LnA8NC31pa7PAk8l5lYCB8LDDwft7xwh7Z107MKgt7KHHBeQaeEncnAFKLJ04CaHgelsuOOv072-1ZBvMW7N_x0&t=3693a5e0
Line: 1111
Проблема
Чтобы выяснить причину ошибки, я постепенно сокращал свой код, пока у меня почти ничего не осталось.Я обнаружил, что когда я выбираю из DropDownList в UpdatePanel, кнопка получает эту ошибку (только в FireFox).Если я удаляю DropDownList, не делаю выбор или удаляю UpdatePanel, кнопка отправки отправляется обратно правильно (любой из них).
Пример
Создание ASPПроект .net 3.5 и поместите приведенный ниже код на страницу aspx.Установите точку останова в вашем обработчике событий Page_Load или OnClick в коде позади.Запустите его, сделайте выбор из DropDownList и нажмите ClickSubmit.Обратите внимание, что точки останова не достигнуты.
<form id="form1" runat="server">
<div>
<asp:ScriptManager runat="server">
</asp:ScriptManager>
<div id="Div1" class="form-layout membership payment">
<asp:UpdatePanel ID="UpdatePanel1" runat="server" RenderMode="Inline">
<contenttemplate>
<table cellpadding="0" cellspacing="0" border="0" class="form_table payment">
<tr>
<th align="right" valign="top">
State <span class="reqd">*</span>
</th>
<td>
<asp:DropDownList Width="75px" ID="ddlState" CssClass="txt" runat="server" AutoPostBack="false">
<asp:ListItem Value="" Text="--Select--" />
<asp:ListItem>AB
</asp:ListItem>
<asp:ListItem>AL
</asp:ListItem>
</asp:DropDownList>
</td>
</tr>
</table>
<div class="clear-left pad-bottom">
</div>
<asp:Label ID="lblCreditCardError" CssClass="creditCardError" runat="server">
</asp:Label>
<table cellpadding="0" cellspacing="0" border="0" class="form_table">
<tr>
<th align="right" valign="top">
</th>
<td>
<asp:HiddenField ID="HFSubmitForm" runat="server" Value="0" />
<asp:Button ID="btnTest" runat="server" OnClick="btnSubmitCC_Click" />
</td>
</tr>
</table>
</contenttemplate>
</asp:UpdatePanel>
</div>
</div>
</form>
Я не думаю, что использование разметки все равно имеет значение, но я попытался добавить элементы в DropDownList, используя привязку в блоке if (! IsPostBack) в методе Page_Load, но это ничего не изменило.