【发布时间】:2011-04-01 10:55:41
【问题描述】:
所以我有一个名为“SafeClickButton”的 ASP.NET 4 自定义控件,它旨在覆盖客户端单击 (OnClientClick) 的默认行为。
基本上我是在尝试禁用单击按钮,然后执行任何现有功能(验证、回发等)。
它看起来可以正确呈现 HTML (onclick="this.disabled=true;__doPostback...),并且它正在正确禁用,但问题在于页面验证。如果页面上的任何验证失败,它的回发然后显示验证错误(应该在客户端完成而不需要回发)。
这是自定义控件的代码。
public class SafeClickButton : Button
{
public override string OnClientClick
{
get
{
return string.Format("this.disabled=true;{0}", Page.ClientScript.GetPostBackEventReference(this, string.Empty));
}
set
{
base.OnClientClick = value;
}
}
protected override PostBackOptions GetPostBackOptions()
{
PostBackOptions options = new PostBackOptions(this, string.Empty) {ClientSubmit = true};
if (Page != null)
{
if (CausesValidation && (Page.GetValidators(ValidationGroup).Count > 0))
{
options.PerformValidation = true;
options.ValidationGroup = ValidationGroup;
}
if (!string.IsNullOrEmpty(PostBackUrl))
{
options.ActionUrl = HttpUtility.UrlPathEncode(ResolveClientUrl(PostBackUrl));
}
}
return options;
}
}
我做错了什么?
编辑
好的,我发现了部分问题:
return string.Format("this.disabled=true;{0}", Page.ClientScript.GetPostBackEventReference(this, string.Empty));
不会应用回发选项的衍生行为。
所以我把它改成了这样:
return string.Format("this.disabled=true;{0}", Page.ClientScript.GetPostBackEventReference(GetPostBackOptions()));
现在验证在客户端正确触发,但按钮没有重新启用,FML =)
我想我现在甚至需要变得聪明,并说“如果验证失败,请重新启用按钮”。
有什么想法吗?
【问题讨论】:
标签: asp.net button custom-controls postback javascript