Управление пользовательскими кнопками ASP.NET - как переопределить OnClientClick, но сохранить существующее поведение?
Поэтому у меня есть пользовательский элемент управления 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 =)
Я думаю, что теперь мне нужно быть умным и сказать: «Если проверка не удалась, снова включите кнопку».
Есть идеи?