|
Проблема состоит в следующем: у нас есть GridView, в нём есть CommandField, примерно вот так:
<asp:GridView ID="gvAnswerList" runat="server" AutoGenerateColumns="False" OnRowCommand="gvAnswerList_RowCommand">
<Columns>
-------------------------------------------------------------
<asp:ButtonField ButtonType="Image" ImageUrl="Images/btn_query.gif" Text="Открыть" CommandName="OpenAnswer" />
</Columns>
</asp:GridView>
Важно то, что у кнопки ButtonType именно "Image", а не "Button", иначе всё было бы хорошо. А в нашем случае происходит двойное срабатывание события OnRowCommand (не регулярно, кстати).
Пусть у нас оно выглядит так:
[c#]
protected void gvAnswerList_RowCommand(object sender, GridViewCommandEventArgs e)
{
switch (e.CommandName)
{
case "OpenAnswer":
//Что-то там сделали
break;
default:
break;
}
}
Так вот, двойное срабатывание указанного выше метода - глюк Framework'а, а не кривые руки разработчиков. Покопавшись на буржуйских форумах, я нашёл довольно нестандартное решение: проверять координаты курсора мыши. При втором проходе они пустые (null). Сделать это можно так:
[c#]
if (Request["x"] == null || Request["y"] == null)
{
Response.End();
}
Этот код нужно прописать в самом начале обработчика. Итак получаем метод без глюков:
[c#]
protected void gvAnswerList_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (Request["x"] == null || Request["y"] == null)
{
Response.End();
}
switch (e.CommandName)
{
case "OpenAnswer":
//Что-то там сделали
break;
default:
break;
}
}
Надеюсь, что такое решение кому нибудь пригодится.
Leach
11 January 2008 13:27 Комментарии (1)
|