#c# #asp.net #.net #gridview #internet-explorer-8
#c# #asp.net #.net #gridview #internet-explorer-8
Вопрос:
У меня возникают проблемы при использовании ButtonField для выполнения команды строки.
Когда я нажимаю кнопку ImageButton в поле кнопки, IsPostBack имеет значение false
Я понимаю, что ImageButton в поле кнопки в GridView должен приводить к тому, что обратная передача будет true.
Вопрос: Может кто-нибудь, пожалуйста, объяснить, прав я или нет, и есть ли свойства, которые нужно установить в поле кнопки, чтобы заставить его выполнить обратную отправку.
Некоторый код:
Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
m_DataTable = GetDataTable();
Session["m_DataTable"] = m_DataTable;
}
else
{
m_DataTable = Session["m_DataTable"];
}
}
и далее в коде:
GridView1.Columns.Clear();
ButtonField cf = new ButtonField();
cf.HeaderStyle.CssClass = "comGridHeadCell";
cf.HeaderText = "some text";
cf.HeaderImageUrl = "images/something.png";
cf.Text = "action";
cf.CommandName = "action";
cf.ImageUrl = "images/something.png";
cf.ButtonType = ButtonType.Image;
cf.ItemStyle.CssClass = "comGridLink";
GridView1.Columns.Add(cf);
GridView1.DataSource = m_DataTable;
GridView1.DataBind();
также:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" AllowPaging="True" AllowSorting="True" OnRowCommand="GridView_RowCommand" OnPageIndexChanging="GridView_PageIndexChanging">
<PagerSettings PageButtonCount="25" />
</asp:GridView>
Редактировать:
Я запускаю сайт в режиме отладки через VS2010. Я тестирую с использованием IE8.
Если я использую firefox, IsPostBack == true
. Это похоже на конкретную проблему при отладке в IE8.
Комментарии:
1. Было бы полезно просмотреть разметку рассматриваемого GridView, а также удалить код, который ничего не делает.
2. @pseudocoder поле кнопки определено только в коде. Я добавлю разметку gridview
3. Кроме того, к вашему сведению, я считаю, что в вашем первом блоке кода есть опечатка … не так ли
Session["m_DataTable"] = m_DataTable;
?4. Когда вы говорите, что ispostback имеет значение false, вы имеете в виду буквально (вы отслеживали код, и это свойство оценивается как false), или вы имеете в виду, что при нажатии кнопки ничего не происходит? Или вы пытаетесь описать какое-то другое поведение? Кроме того, в каком событии страницы вы создаете этот столбец динамически?
5. Я отследил щелчок, и переменная IsPostBack имеет значение false. Динамическое создание происходит в функции, вызываемой из Page_Load
Ответ №1:
Вы создаете этот столбец при каждой загрузке?
Следующее запускает команду RowCommand, как и ожидалось, и IsPostBack имеет значение true, как и ожидалось.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Diagnostics;
using System.Data;
namespace WebApplication2
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Debugger.Break();
}
else
{
Debugger.Break();
}
DataTable oDataTable = new DataTable();
oDataTable.Columns.Add("animal");
DataRow oDataRow = oDataTable.NewRow();
oDataRow["animal"] = "cat";
oDataTable.Rows.Add(oDataRow);
GridView1.Columns.Clear();
ButtonField cf = new ButtonField();
cf.HeaderStyle.CssClass = "comGridHeadCell";
cf.HeaderText = "some text";
cf.HeaderImageUrl = "images/something.png";
cf.Text = "action";
cf.CommandName = "action";
cf.ImageUrl = "images/something.png";
cf.ButtonType = ButtonType.Image;
cf.ItemStyle.CssClass = "comGridLink";
GridView1.Columns.Add(cf);
GridView1.DataSource = oDataTable;
GridView1.DataBind();
}
protected void GridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
}
protected void GridView_RowCommand(object sender, GridViewCommandEventArgs e)
{
Debugger.Break();
}
}
}
Комментарии:
1. 1 за время, затраченное на проверку этого. Я возьму это, попробую и посмотрю, что я получу.
2. как вы это тестировали, запустив VS2010 или развернув в IIS?
3. Режим отладки VS2010. Не развертывайте это, пока в нем есть перерывы, хе-хе
4. в каком браузере вы его тестировали? Я пробовал ie8 (postback == false) и firefox (postback == true)…
Ответ №2:
Проблема, скорее всего, связана с вашим динамическим созданием поля кнопок. Когда вы динамически создаете элемент управления, он не запускает события при обратной передаче, если вы не воссоздаете его при каждой обратной передаче на странице.Загрузка или более ранняя. В каком обработчике событий находится ваш код поля кнопки?
Я подозреваю, что эта страница.IsPostBack == False из-за этого, хотя я точно не знаю, почему это так.