2011-11-03 27 views
3

使用ButtonField發出行命令時遇到問題。GridView的ButtonField點擊是否會導致回發?

當我點擊ButtonField字段的ImageButton的,是的IsPostBack假

我的理解是,在ButtonField字段在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(); 

也:

<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

看到有問題的GridView的標記會很有用,而且如果您將刪除沒有做任何事情的代碼。 – pseudocoder

+0

@pseudocoder ButtonField僅在代碼中定義。我會添加GridView標記 – ghostJago

+0

也FYI我相信你的第一個代碼塊中有一個錯字......不應該是'Session [「m_DataTable」] = m_DataTable;'? – pseudocoder

回答

2

您是否在每個負載上創建該列?

以下按預期激發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(); 
     } 
    } 
} 
+0

+1用於測試此時間。我會採取這一點,嘗試一下,看看我得到了什麼。 – ghostJago

+0

你是如何測試這個的,通過運行VS2010或部署到IIS? – ghostJago

+0

VS2010調試模式。不要部署它,而它已經打破它嘿嘿 – Nikki9696

1

這個問題很可能與您動態創建ButtonField有關。當您動態創建控件時,它不會在回發中觸發事件,除非您在Page.Load或更早版本的每次回發中重新創建該控件。你的ButtonField代碼是什麼事件處理程序?

我懷疑是因爲這個Page.IsPostback == False,雖然我不知道它爲什麼會這樣做。

相關問題