2014-01-23 54 views
1

我在每一行都有一個圖像按鈕的gridview。我已經設置了命令名和命令參數。GridView中的圖像按鈕的行命令事件不會觸發?

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="1" CellSpacing="1" CssClass="one-column-emphasis" DataKeyNames="Id" OnRowCommand="GridView1_RowCommand" OnRowDataBound="GridView1_RowDataBound"> 

<asp:TemplateField> 
       <ItemTemplate> 
        <asp:ImageButton ID="ImageButton1" runat="server" AlternateText="Register" CssClass="buttonreg" EnableTheming="False" CommandArgument='<%# Eval("Id") %>' CommandName="register" /> 
       </ItemTemplate> 
       <ItemStyle HorizontalAlign="Center" /> 
      </asp:TemplateField> 

我碰到下面的錯誤,

無效的回發或回調參數。 在頁面中使用 配置或<%@ Page EnableEventValidation =「true」%>啓用事件驗證。 出於安全目的,此功能驗證回發 或回調事件的參數源自最初由 呈現它們的服務器控件。如果數據有效且預期,請使用 ClientScriptManager.RegisterForEventValidation方法,以便 註冊回發或回調數據以進行驗證。

我錯過了什麼?

回答

1

當您使用的GridView,綁定這

protected void Page_Load(Object sender, EventArgs e) 
{ 
    if(!IsPostBack) 
    { 
     Binddatagrid(); 
    } 
} 

註冊ClientScriptManager.RegisterForEventValidation Method回發的方法

+0

我有一個dropdownlist包含月份也是。根據選定的月份綁定的gridview。當我使用你的代碼gridview顯示沒有數據。 – user3065219

+0

或將頁面的EnableEventValidation設置爲false –

+0

錯誤消失。但事件未觸發。 – user3065219

0

使用此代碼

HTML代碼:

<asp:GridView ID="mygrid" CssClass="reportgrid" EmptyDataRowStyle-CssClass="userwel" 
             DataKeyNames="JudgementId, titles, Is_Active" AutoGenerateColumns="false" Width="800px" runat="server" OnRowCommand="mygrid_RowCommand"> 
<EmptyDataTemplate> 
No Data Found. 
</EmptyDataTemplate> 
<Columns> 
<asp:TemplateField HeaderText="Name" HeaderStyle-HorizontalAlign="Left"> 
<ItemTemplate>           
<asp:Label ID="label_Address" Text='<%# Bind("titles")%>' runat="server"></asp:Label> 
</ItemTemplate> 
</asp:TemplateField> 
<asp:TemplateField HeaderText="Status" HeaderStyle-HorizontalAlign="Left"> 
<ItemTemplate> 
<asp:Label ID="lblstatus" Text='<%# Bind("Is_Active")%>' runat="server"></asp:Label> 
</ItemTemplate> 
</asp:TemplateField> 
<asp:TemplateField HeaderText="Edit" ItemStyle-Width="43px"> 
<ItemTemplate> 
<asp:ImageButton ID="imgedit" runat="server" alt="Edit" Height="40px" Width="40px" 
src="../Images/Edit.png" CommandName="edit1" CommandArgument='<%# Container.DisplayIndex %>' /> 
</ItemTemplate> 
</asp:TemplateField> 
<asp:TemplateField HeaderText="Delete" ItemStyle-Width="43px"> 
<ItemTemplate> 
<asp:ImageButton ID="imgdelete" runat="server" alt="Edit" Height="40px" Width="40px" 
src="../Images/delete.png" CommandName="delete1" CommandArgument='<%# Container.DisplayIndex %>' OnClientClick="return ConfirmationBox();" /> 
</ItemTemplate> 
</asp:TemplateField> 
<asp:TemplateField HeaderText="View" ItemStyle-Width="43px"> 
<ItemTemplate> 
<asp:ImageButton ID="imgview" runat="server" alt="Edit" Height="40px" Width="40px" 
src="../Images/view.png" CommandName="view1" CommandArgument='<%# Container.DisplayIndex %>' /> 
</ItemTemplate> 
</asp:TemplateField> 
</Columns> 
</asp:GridView> 

的.cs代碼

DropDownList中的
protected void mygrid_RowCommand(object sender, GridViewCommandEventArgs e) 
     { 
      try 
      { 
       int row = Convert.ToInt32(e.CommandArgument);   
       int JudgementId = Convert.ToInt32(gvL_Judgement.DataKeys[Convert.ToInt32(e.CommandArgument)]["JudgementId"]); 
       if (e.CommandName == "edit1") 
       { 
        //code to edit 
       } 
       if (e.CommandName == "view1") 
       { 
        //code to view 
       } 
       if (e.CommandName == "delete1") 
       { 
        //code to delete 
       } 
      } 
      catch (Exception ex) 
      { 

      } 
     } 
1

設置AutoPostBack屬性,以False.Make確保在Page_Load事件,

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     //Call Grid() function. 
    } 

} 

呼叫在DropDownList中的SelectIndexChanged事件的網格()函數。 謝謝大家的幫助。

0

必須調用FillGrid()方法。

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     FillGrid(); 
    } 
} 
0

這是回答,因爲我有一個很難找到這個解決方案的一個古老的線程,但思想。

解決的辦法是,你必須使用if (!IsPostBack)

但對我來說我沒有什麼寫在.aspx頁面中的我的Page_Load事件,但我在母版頁中有下面的代碼。

protected void Page_Load(object sender, EventArgs e) 
{ 
    Page.DataBind(); 
} 

一次我把那的Page.DataBind();裏面如果(!IsPostBack)問題解決了。

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     Page.DataBind(); 
    } 
} 

希望有人找到這個有用的。

相關問題