Если вы используете изображение в качестве типа кнопки в GridView, событие rowcommand будет выполнено дважды при его запуске. Говорят, что оно появляется только в IE6, IE5, Firefox и т. д. В моем IE7 тоже нет проблем. Проблема, похоже, связана с версией IIS. Я с нетерпением жду патча Microsoft.
Сегодня днем я столкнулся с проблемой. Событие rowcommand в GridView было выполнено дважды, и обратная передача также была выполнена дважды. Сначала я заподозрил, что это проблема с отладчиком. Проверив журнал, я подтвердил, что это действительно так. казнен дважды.
Я проверил код n раз и исключил его по предложению, но проблемы так и не было найдено. Я начал подозревать, что это мышь. Я перехватил пакет и обнаружил, что два запроса действительно были отправлены, а первый запрос не был обработан. . Иногда я менял тип кнопки с изображения на кнопку, и это неожиданно срабатывало. Похоже, проблема заключается только в Imagebutton.
С помощью поиска в Google я обнаружил, что многие люди сталкивались с этой проблемой, и это определенно ошибка asp.net. Нажатие кнопки отправит два запроса в iis. В первый раз на восемь байт меньше, чем во второй, в результате чего первый запрос будет неудачным, а затем он будет отправлен снова. Поэтому проще всего игнорировать этот запрос. первый запрос, следующий: Это первое решение.
В настоящее время существует два решения, ни одно из которых не является идеальным. Первое — добавить следующий оператор к событию команды строки:
if (Запрос["x"] == null && Запрос["y"] == null)
Ответ.Конец();
С помощью этого оператора определяются координаты изображения. Если координаты равны нулю, это первый запрос. Поскольку первый запрос недействителен, завершите его.
Второй вариант рекомендован Microsoft: старайтесь не использовать кнопку изображения в представлении сетки, а используйте ссылку или кнопку. Если вам необходимо ее использовать, вы можете использовать аналогичный код:
<Столбцы>
<Шаблон элемента>
"RowIndex") %>' OnCommand="ImageButton1_Command" />
Колонки>
protected void ImageButton1_Command(отправитель объекта, CommandEventArgs e) {
GridView1.DeleteRow(Int32.Parse(e.CommandArgument.ToString()));
}
Добавьте imagebuttong в TemplateField и вызовите deleterow в событии.
Я не знаю, есть ли лучшее решение. На следующем форуме эта проблема подробно обсуждается:
http://www.developersdex.com/asp/message.asp?p=1116&r=4641456&page=2 Результат обсуждения на первой странице: Эта проблема возникнет только в том случае, если тип кнопки — изображение, что может быть пропущено Не читайте, на следующих двух страницах есть подробные обсуждения и решения.
Сегодня весь день сталкиваюсь со странными проблемами, и у меня кружится голова. Один и тот же код часто может выполняться какое-то время, но не какое-то время, и в vs2005 продолжают происходить странные вещи. Я просто смоделировал несколько задач, которые невозможно было запустить днем дома, и все сработало нормально! ! Завтра у меня снова будет болеть голова
http://www.cnblogs.com/bluewater/archive/2006/11/21/567871.html