使用ButtonField发出行命令时遇到问题。
当我单击ButtonField中的ImageButton时,IsPostBack为false
我的理解是GridView中的ButtonField中的ImageButton应该导致回发为真。
问题:有人可以解释一下我是对还是错,如果在按钮字段中设置属性以使其发出回发。
部分代码:
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中进行调试时,这看起来像是一个特定的问题。
答案 0 :(得分:2)
您是否在每次加载时创建该列?
以下内容按预期触发RowCommand,IsPostBack按预期为真。
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)
问题很可能与您动态创建ButtonField有关。当您动态创建控件时,它不会在回发时触发事件,除非您在Page.Load或更早版本的每个回发上重新创建它。你的ButtonField代码是什么事件处理程序?
我怀疑Page.IsPostback == False因为这个,虽然我不确切知道为什么会这样做。