【问题标题】:GetCallbackEventReference is firing Validators - How to Disable itGetCallbackEventReference 正在触发验证器 - 如何禁用它
【发布时间】:2011-05-29 23:36:10
【问题描述】:

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

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

我需要避免这种行为,而不必为页面中的每个验证器设置一个 ValidationGroup,并且我正在尝试不使用 javascript 来执行此操作(我知道我可以在回调事件之前禁用验证器,但我小心不要到那里)。

我也尝试过实现 IButtonControl,这样我就可以拥有一个 CausesValidation 属性并将其设置为 false,但它不起作用。

有人知道这个问题吗?

提前谢谢你!!

塞巴斯蒂安。

【问题讨论】:

    标签: asp.net controls validation icallbackeventhandler


    【解决方案1】:

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

    在控件的 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“]”为空,因为我们在回调中而不是在回发中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-09
      • 2015-11-22
      • 1970-01-01
      • 1970-01-01
      • 2012-11-15
      • 1970-01-01
      相关资源
      最近更新 更多