Итак, у меня есть пользовательский элемент управления ASP.NET 4 под названием «SafeClickButton», который предназначен для переопределения поведения по умолчанию клика на стороне клиента (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));
Не будет применять дервидное поведение postbackoptions.
Поэтому я изменил его на следующее:
return string.Format("this.disabled=true;{0}", Page.ClientScript.GetPostBackEventReference(GetPostBackOptions()));
Теперь проверка запускается правильнона стороне клиента, но кнопка не включена повторно, FML =)
Я думаю, что мне нужно быть даже умным сейчас и сказать: «Если проверка не пройдена, повторно включить кнопку».
Есть идеи?