如果启用了事件验证,则会抛出无效的回发或回调参数异常

Invalid postback or callback argument exception is thrown if Event validation is enabled

在同一个 aspx 页面中,此 gridview 列有效:

       <asp:CommandField ShowSelectButton="True" 
            itemstyle-cssclass ="SesnGV_SelectButton" ButtonType="Button">

但是当我使用设计器并将其转换为模板字段时,结果是:

        <asp:TemplateField ShowHeader="False">
            <ItemTemplate>
                <asp:Button ID="SesnGV_SelectButton" runat="server" 
                    CausesValidation="False" 
                    CommandName="Select" Text="Select" />
            </ItemTemplate>
            <ItemStyle CssClass="SesnGV_SelectButton" />
        </asp:TemplateField>

它给出错误:

Invalid postback or callback argument.  
Event validation is enabled using <pages enableEventValidation="true"/> 
in configuration or <%@ Page EnableEventValidation="true" %> in a page. 

我在另一个页面中有一个非常相似的控件,没有关于启用事件验证的符号,但它工作正常。

关于为什么这可能作为模板字段失败,但作为直接命令字段工作的任何建议?

默认情况下,EnableEventValidation为真,因此您无需显式设置。因此,您可以安全地移除它。

此外,如果在Page_Load事件中绑定数据到GridView,需要检查IsPostBack 绑定前。

否则,再次重新绑定GridView,将创建不同ID的Button控件。它会导致 Invalid postback or callback argument 错误。

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