.net gridview中图像按钮的行命令事件未触发?

.net gridview中图像按钮的行命令事件未触发?,.net,gridview,rowcommand,.net,Gridview,Rowcommand,我有一个gridview,每行有一个图像按钮。我已经设置了命令名和命令参数 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="1" CellSpacing="1" CssClass="one-column-emphasis" DataKeyNames="Id" OnRowCommand="GridView1_RowCommand" OnRowDataBound="Grid

我有一个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>

我得到以下错误

回发或回调参数无效。 在中使用启用事件验证 配置或在页面中。 出于安全目的,此功能验证要回发的参数是否正确 或回调事件源自最初创建的服务器控件 把它们呈现出来。如果数据有效且符合要求,请使用 ClientScriptManager.RegisterForEventValidation方法,以便 注册回发或回调数据以进行验证


我缺少什么?

当您使用gridview时,请将其绑定到

protected void Page_Load(Object sender, EventArgs e)
{
    if(!IsPostBack)
    {
        Binddatagrid();
    }
}
注册回发方法使用此代码

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>

将DropDownList的AutoPostBack属性设置为False。请确保在Page_Load事件中

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

}
在DropDownList的SelectIndexChanged事件中调用Grid()函数。 谢谢大家的帮助。

必须像这样调用FillGrid()方法

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

这是一个旧的线程,但我想回答,因为我很难找到解决这个问题的办法

解决方案是,如果(!IsPostBack)

但在我的例子中,我在.aspx页面的页面加载事件中并没有写任何东西,但在我的母版页面中有下面的代码

protected void Page_Load(object sender, EventArgs e)
{
    Page.DataBind();
}
一旦我把那页放进去。Databind();如果(!IsPostBack)问题已解决,则返回内部

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

希望有人觉得这有用。

我有一个dropdownlist,其中也包含月份。gridview根据所选月份绑定。当我使用您的代码时,gridview不显示任何数据。或者将页面的EnableEventValidation设置为false
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        Page.DataBind();
    }
}