GetCallbackEventReference正在触发Validators - 如何禁用它

时间:2010-12-23 13:31:27

标签: asp.net controls validation icallbackeventhandler

我们有一个服务器控件,它继承自CompositeControl并实现IPostBackDataHandler,ICallbackEventHandler。

当我们为控件触发CallBackEvent时(使用Page.ClientScript.GetCallbackEventReference(this,“args”,“callBack”,“context”,true)),在异步模式下,它执行页面的验证器没有定义ValidationGroup。

我需要避免这种行为,而不必将ValidationGroup设置为页面中的每个验证器,并且我不想使用javascript(我知道我可以在callbackevent之前禁用验证器,但我是不要到那里去。)

我还试图实现IButtonControl,因此我可以拥有一个CausesValidation属性并将其设置为false,但它不起作用。

有人对这个问题有所了解吗?

提前谢谢!!

安。

1 个答案:

答案 0 :(得分:0)

我在服务器代码中找到了一种解决方法,可以在不影响页面行为的情况下禁用验证程序。

在控件的LoadPostData事件中,如果回调来自控件,则禁用页面的每个验证器。我已经意识到它不会影响行为,因为验证器的实际状态(启用属性)不会被修改。我的意思是:如果我进行回调,我禁用每个验证器,这样他们就不会被解雇,然后我回发验证器仍然正常工作(如果它们在前一次回调之前启用)

我使用的代码是:

public virtual bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection)
    {
        if (postCollection["__CALLBACKID"] == this.UniqueID)
            foreach (IValidator validator in Page.Validators)
                    (validator as WebControl).Enabled = false;
    }

我使用“_ CALLBACKID”来验证回调的来源,因为“postCollection [” _EVENTTARGET“]”为空,因为我们处于回调而不是回发