ASP.NET: Проблема двойного postback в GridView CommandField с ButtonType = "Image"

четверг, 12 августа 2010, Александр Краковецкий

В 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 Украина


Сайт:
http://www.microsoft.com/ukr/ua/

Microsoft Украина Украинское подразделение компании Microsoft.

Ищите нас в интернетах!

Комментарии

Свежие вакансии