我们有一个服务器控件,它继承自CompositeControl并实现IPostBackDataHandler,ICallbackEventHandler。
当我们为控件触发CallBackEvent时(使用Page.ClientScript.GetCallbackEventReference(this,“args”,“callBack”,“context”,true)),在异步模式下,它执行页面的验证器没有定义ValidationGroup。
我需要避免这种行为,而不必将ValidationGroup设置为页面中的每个验证器,并且我不想使用javascript(我知道我可以在callbackevent之前禁用验证器,但我是不要到那里去。)
我还试图实现IButtonControl,因此我可以拥有一个CausesValidation属性并将其设置为false,但它不起作用。
有人对这个问题有所了解吗?
提前谢谢!!
安。
答案 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“]”为空,因为我们处于回调而不是回发