Итак, у меня есть пользовательский элемент управления 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 =)
Я думаю, что мне нужно быть даже умным сейчас и сказать: «Если проверка не пройдена, нажмите кнопку повторного включения ".
Есть идеи?