Кнопка запускается дважды с ButtonField внутри GridView внутри UpdatePanel с FireFox - PullRequest
0 голосов
/ 06 февраля 2010

У меня есть панель обновления, которая содержит 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();
    }
}

1 Ответ

0 голосов
/ 06 февраля 2010

С здесь я нашел обходной путь:

Замена ButtonField на TemplateField, содержащую ImageButton, решает проблему.Достаточно хорошо для меня, но все равно похоже на ошибку в ASP .NET или FireFox.

...