单击按钮时无效的回发或回调参数错误 - 初学者

时间:2013-05-21 09:32:33

标签: c# asp.net

我收到以下错误;

  

无效的回发或回调参数。事件验证已启用   在配置中使用或<%@   Page EnableEventValidation =“true”%>在一个页面中。为了安全   目的,此功能验证回发或回调的参数   事件源自最初呈现的服务器控件   他们。如果数据有效且预期,请使用   ClientScriptManager.RegisterForEventValidation方法   注册回发或回调数据以进行验证。

我添加了一个columm,并在其中添加了一个按钮,当按钮被触发时,以下C#代码被执行;

ASP.NET代码

    <Columns>
        <%-- <asp:BoundField /> Definitions here --%>
        <asp:TemplateField>
  <ItemTemplate>
    <asp:Button ID="AddButton" runat="server" 
      CommandName="AddToCart" 
      CommandArgument="<%# ((GridViewRow) Container).RowIndex %>"
      Text="Add to Cart" />
  </ItemTemplate> 
</asp:TemplateField>

    </Columns>

C#

   protected void GridView1_RowCommand(object sender,GridViewCommandEventArgs e)
        {
            if (e.CommandName == "AddToCart")
            {
                int index = Convert.ToInt32(e.CommandArgument);

                // Retrieve the row that contains the button 
                // from the Rows collection.
                GridViewRow row = GridView1.Rows[index];

            }

        }

我如何摆脱这个错误;

我添加了<globalization requestEncoding="utf-8"/>,但错误仍然存​​在。 `

更新

            <asp:GridView runat="server" ID="gdv" AutoGenerateColumns="True" OnSorting="sortRecord" AllowSorting="true" DataKeyNames="HotelName" CellPadding="4" Width="746px">
    <Columns>
        <%-- <asp:BoundField /> Definitions here --%>
        <asp:TemplateField>
  <ItemTemplate>
    <asp:Button ID="AddButton" runat="server" 
      CommandName="AddToCart" 
      CommandArgument="<%# ((GridViewRow) Container).RowIndex %>"
      Text="Add to Cart" />
  </ItemTemplate> 
</asp:TemplateField>

    </Columns>
</asp:GridView>

1 个答案:

答案 0 :(得分:0)

我通常发现自己使用的是按钮OnClick事件而不是GridViewRowCommand。在大多数情况下,它更容易使用。所以你的ASP看起来像;

<asp:GridView runat="server" ID="gdv" AutoGenerateColumns="False" OnSorting="sortRecord"    AllowSorting="true" DataKeyNames="HotelName" CellPadding="4" Width="746px">
    <Columns>
      <%-- <asp:BoundField /> Definitions here --%>
        <asp:TemplateField>
           <ItemTemplate>
              <asp:Button ID="AddButton" runat="server" OnClick="AddButton_Click" Text="Add to Cart" />
           </ItemTemplate> 
        </asp:TemplateField>
    </Columns>
</asp:GridView>

你的c#看起来像;

protected void AddButton_Click(object sender, EventArgs e)
{
    Button btn = (Button)sender;
    GridViewRow row = (GridViewRow)btn.NamingContainer;
}

现在在您的代码后面,您可以执行该行所需的任何操作,并且您知道您将获得所需的行。

希望这有帮助!