У меня есть панель обновления, которая содержит GridView, внутри которого находится ButtonField. Всякий раз, когда я нажимаю кнопку, я вижу, что Firefox делает два POST (через Firebug). Один сразу прерывается, но он достигает сервера. Это вызывает проблемы в моем коде на стороне сервера, поскольку команда (копия) выполняется дважды.
IE6 и IE8 не демонстрируют это поведение.
Кто-нибудь знает, что вызывает это или что я могу с этим поделать?
Мне удалось воспроизвести проблему до минимума на этой странице:
<form id="form1" runat="server">
<asp:XmlDataSource ID="XmlDataSource1" runat="server">
<Data>
<bla>
<wibble wobble="1" />
</bla></Data>
</asp:XmlDataSource>
<asp:ScriptManager runat="server"></asp:ScriptManager>
<asp:UpdatePanel runat="server">
<ContentTemplate>
<asp:Label runat="server" ID="Counter" Text="0"></asp:Label>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataSourceID="XmlDataSource1" onrowcommand="GridView1_RowCommand">
<Columns>
<asp:BoundField DataField="wobble" HeaderText="wobble"
SortExpression="wobble" />
<asp:ButtonField HeaderText="wobble" CommandName="IncrementWobble"
SortExpression="wobble" ButtonType="Image" ImageUrl="icons/page_copy.png" Text="increment" />
</Columns>
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
</form>
При создании этой маленькой версии я заметил, что проблема возникает только с ButtonType = "Image", а не с ButtonType = "Button".
Для полноты, обработчик события:
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "IncrementWobble")
{
int count = Int32.Parse(Counter.Text) + 1;
Counter.Text = count.ToString();
}
}