如何使用ClientScriptManager.RegisterForEventValidation For Repea

本文关键字:For Repea RegisterForEventValidation ClientScriptManager 何使用 | 更新日期: 2023-09-27 18:06:46

我在填充用户控件的页面上有一个Repeater。在那个用户控件中有一个ImageButton。当我点击ImageButton在用户控件后面的代码中调用click函数时,它不会触发click函数抛出这个错误:

505|error|500|无效的回发或回调参数。事件验证在配置中启用或在页面中使用<%@ Page EnableEventValidation="true" %>。出于安全目的,此功能验证回发或回调事件的参数是否来自最初呈现它们的服务器控件。如果数据是有效且预期的,则使用ClientScriptManager。RegisterForEventValidation方法,以便注册回发或回调数据以进行验证。|

我将如何使用ClientScriptManager。RegisterForEventValidation处理PostBack上的ImageButton在用户控制?

[Page.aspx]

<asp:ScriptManager runat="server" ID="ScriptManager1">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" ChildrenAsTriggers="false" runat="server">
    <ContentTemplate>
        <some:control ID="SomeControl" runat="server" />
        <asp:Repeater ID="Repeater" OnItemDataBound="Repeater_ItemDataBound" runat="server">
            <ItemTemplate>
                <asp:UpdatePanel ID="UpdatePanel2" UpdateMode="Conditional" ChildrenAsTriggers="false" runat="server">
                    <ContentTemplate>
                        <user:control ID="UserControl" runat="server" />
                    </ContentTemplate>
                    <Triggers>
                        <asp:AsyncPostBackTrigger ControlID="UserControl" />
                    </Triggers>
                </asp:UpdatePanel>
            </ItemTemplate>
        </asp:Repeater>
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="SomeControl" />
    </Triggers>
</asp:UpdatePanel>
[Page.aspx.cs]

protected void Page_Load(object sender, EventArgs e)
{
     Repeater.DataSource = someList;
     Repeater.DataBind();
}
protected void Repeater_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
{
    if ((e.Item.ItemType == ListItemType.AlternatingItem) || (e.Item.ItemType == ListItemType.Item))
    {
        UserControl uc = (UserControl)e.Item.FindControl("UserControl");
        uc.SetEverything();
    }
}
[UserControl.ascx]

<asp:ImageButton ID="imgBtn" runat="server" OnClick="ImageButton_Click" ImageUrl="image.png" />
[UserControl.ascx.cs]

protected void ImageButton_Click(Object sender, EventArgs e)
{
    // DO SOMETHING
}

如何使用ClientScriptManager.RegisterForEventValidation For Repea

我刚刚回答了我的问题。我最后检查了更新面板上触发的事件类型。如果是ImageButton点击,那么不要在中继器上做数据绑定。

[Page.aspx.cs]

protected void Page_Load(object sender, EventArgs e)
{
    if (!ScriptManager1.AsyncPostBackSourceElementID.EndsWith("imgBtn"))
    {
        Repeater.DataSource = someList;
        Repeater.DataBind();
    }
}