Asp.net 如果启用了事件验证,则引发无效回发或回调参数异常

Asp.net 如果启用了事件验证,则引发无效回发或回调参数异常,asp.net,Asp.net,在同一个aspx页面中,此gridview列工作: <asp:CommandField ShowSelectButton="True" itemstyle-cssclass ="SesnGV_SelectButton" ButtonType="Button"> 但是,当我使用设计器并将其转换为模板字段时,会导致: <asp:TemplateField ShowHeader="False">

在同一个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. 
回发或回调参数无效。
使用启用事件验证
在配置或页面中。
在另一个页面中,我有一个非常类似的控件,没有关于启用事件验证的符号,并且它工作得很好

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

默认情况下,是真的,因此您不需要显式设置它。因此,您可以安全地将其移除

此外,如果您将数据绑定到GridView页面加载事件,则需要在绑定前检查IsPostBack

否则,GridView将重新绑定,并将创建具有不同ID的按钮控件。它导致
回发或回调参数无效
错误

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

这解决了问题。谢谢隐马尔可夫模型。。“将创建具有不同ID的按钮控件”。这可能意味着,在整个gridview创建/发送/返回/接收/解释周期的某个地方,创建的模板按钮没有被识别为返回的模板按钮。。。?更多的黑匣子asp.net行为,我想,然而,我想这就是automagic的价格。再次谢谢。是的,你说得对。Net是基于事件模型的;回发时控件的ID必须与原始ID相同。您可能想看看ASP.NETMVC,它比ASP.NETWeb表单灵活得多。