ASP.NET: Проблема двойного postback в GridView CommandField с ButtonType = "Image"
В Internet Explorer наблюдается следующая проблема:
"Any CommandField with ButtonType = "Image" causes a double postback when clicked in Internet Explorer." - Любой CommandField c ButtonType = "Image" вызывает двойной postback.
В результате этого все методы жизненного цикла страницы вызываются два раза (в том числе и Page_Load).
На Microsoft Connect предлагают такие способы решения проблемы.
1. Добавить в метод RowCommand следующий код:
if (Request["x"] == null || Request["y"] == null) { Response.End(); }
2. Убрать тип и переопределить одно из свойств вида ***Text:
<asp:CommandField ButtonType="Image" EditText="Select" ShowEditButton="True" EditImageUrl="~/Images/Edit.gif" /> <asp:CommandField EditText="<img src='../Images/Edit.gif' border=0>" ShowEditButton="True" />
Если использовать программный код, то то будет выглядеть таким образом:
CommandField edit = new CommandField(); edit.EditImageUrl = "~/Images/Edit.gif"; edit.EditText = "Edit request"; //edit.ButtonType = ButtonType.Image;
И потом в RowDataBound написать:
LinkButton link = (LinkButton)e.Row.Cells[editCellIndex].Controls[0]; link.Text = @"<a href=""link_to_page""><img src=""link_to_image"" border=""0""/></a>";
После этого все должно работать правильно.
Компании из статьи
Microsoft Украина | Украинское подразделение компании Microsoft. |