C# GridView按钮字段单击是否会导致回发?

C# GridView按钮字段单击是否会导致回发?,c#,asp.net,.net,gridview,internet-explorer-8,C#,Asp.net,.net,Gridview,Internet Explorer 8,我在使用ButtonField发出row命令时遇到问题 单击按钮字段中的ImageButton时,IsPostBack为false 我的理解是GridView中按钮字段中的ImageButton应该会导致回发为真。 问题:有人能解释一下我是对还是错,以及按钮字段上是否有属性可以设置以使其发出回发 一些代码: Page_Load(object sender, EventArgs e) { if (!IsPostBack) { m_DataTable = GetDa

我在使用ButtonField发出row命令时遇到问题

单击按钮字段中的ImageButton时,IsPostBack为false

我的理解是GridView中按钮字段中的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();
此外:



编辑: 我正在通过VS2010以调试模式运行该站点。我正在使用IE8进行测试。
如果我使用firefox,
IsPostBack==true
。在IE8中调试时,这似乎是一个特定的问题。

该问题很可能与动态创建按钮字段有关。动态创建控件时,它不会在回发时触发事件,除非在Page.Load或更早版本的每次回发时重新创建它。按钮字段代码在哪个事件处理程序中


我怀疑Page.IsPostback==因此为假,尽管我不知道它为什么会这样做。

您是否在每次加载时都创建该列

以下命令按预期激发行,而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();
        }
    }
}

查看有问题的GridView的标记,以及删除不起任何作用的代码,都会很有用。@pseudocoder按钮字段仅在代码中定义。我将添加gridview标记供您参考,我相信您的第一个代码块中有一个输入错误…它不应该是
Session[“m_DataTable”]=m_DataTable?当您说ispostback为false时,您的意思是字面意思(您跟踪了代码并且该属性的计算结果为false),还是说当您单击按钮时,什么都没有发生?还是你在试图描述其他行为?另外,您在哪个页面事件中动态创建该列?我跟踪了单击,IsPostBack变量为false。动态创建是在从Page_Load+1调用的函数中进行的,测试所用的时间为。我将使用它,尝试一下,看看我得到了什么。您是如何通过运行VS2010或部署到IIS来测试它的?VS2010调试模式。当它有漏洞时不要部署它。你用哪个浏览器测试过它?我试过ie8(回发==false)和firefox(回发==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();
        }
    }
}