正确使用Page.ClientScript.RegisterForEventValidation

时间:2009-09-03 10:06:55

标签: c# asp.net

我在usercontrol中有以下方法

    protected override void Render(HtmlTextWriter writer)
    {
        base.Render(writer);

        Page.ClientScript.RegisterForEventValidation(DataList1.UniqueID);
        if (DataList1.Items.Count > 0)
        {
            foreach (DataListItem item in DataList1.Items)
            {
                Page.ClientScript.RegisterForEventValidation(item.UniqueID);
                foreach (Control ctrl in item.Controls)
                {
                    if (ctrl is Button)
                    {
                        Button btn = ctrl as Button;
                        Page.ClientScript.RegisterForEventValidation(btn.UniqueID, btn.CommandArgument);
                    }
                }
            }
        }
    }

我正在尝试让页面停止向我提供“无效的回发或回调参数。在配置中使用事件验证或在页面中<%@ Page EnableEventValidation =”true“%>”时出现错误在Datalist中进行选择(使用数据绑定命令参数单击按钮)。我试图为提交控件注册事件验证,但我无法使其正常工作。

有人使用这种方法有任何成功吗?我真的不想禁用页面的事件验证。

2 个答案:

答案 0 :(得分:0)

发现问题根本与EventValidation没有关系,通常错误消息一如既往地有用。

删除页面回发事件上的数据绑定为我排序问题就像这样。

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            //do datbinding
        }
    }

答案 1 :(得分:0)

通常,当您在aspx文件中放置验证器时,您告诉验证器哪个控件,例如与之关联的文本框。但是,假设您有一个CustomValidator,它会检查您是否输入了手机号码。在“手机”的“家庭电话”中。

此验证程序与特定文本字段无关。因此,不要在CustomValidator上设置ControlToValidate属性,而是将其留空,然后在两个控件上调用RegisterForEventValidation。

因此该函数只是告诉框架特定控件包含应该验证的数据。每当您在运行时填写(或清除)控件时,框架都会使用它来设置javascript事件以运行客户端验证。

所以你不应该注册事件验证的按钮,这是没有意义的。如果您已经有一个验证器,那么也没有理由为事件验证注册文本字段,其中ControlToValidate指向该文本框。

您遇到的问题可能与将按钮与特定“验证组”关联,或者是否在按钮上设置“原因验证”更相关。 还要记住,您还应该检查回发事件处理程序中的验证。

Page.Validate();
if (!Page.IsValid) return;

Page.Validate("ValidationGroup");
if (!Page.IsValue("validationGroup")) return;
相关问题