1

我有一个网格视图,每行都有一个图像按钮。我已经设置了命令名称和命令参数。

<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 方法注册回发或回调数据以进行验证。

我错过了什么?

4

5 回答 5

1

当您使用gridview时,将其绑定在

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

注册您的ClientScriptManager.RegisterForEventValidation Method回发方法

于 2014-01-23T10:03:24.937 回答
1

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

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

}

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

于 2014-01-24T06:37:48.283 回答
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 代码

 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)
            {

            }
        }
于 2014-01-23T10:21:41.263 回答
0

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

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        FillGrid();
    }
}
于 2014-11-12T14:00:24.077 回答
0

这是一个旧线程,但想到回复,因为我很难找到解决方案。

解决方案是你必须使用 if (!IsPostBack)

但在我的情况下,我在 .aspx 页面的 Page_Load 事件中没有写任何内容,但我的母版页中有以下代码。

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

一旦我把那个 Page.Databind(); if (!IsPostBack) 里面的问题解决了。

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

希望有人觉得这很有用。

于 2015-06-04T09:19:17.483 回答