2

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

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

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

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

有人对这个问题有任何想法吗?

先感谢您!!

塞巴斯蒂安。

4

1 回答 1

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

于 2010-12-29T15:24:40.307 回答