Управление пользовательскими кнопками 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 =)

Я думаю, что мне нужно быть даже умным сейчас и сказать: «Если проверка не пройдена, нажмите кнопку повторного включения ".

Есть идеи?

5
задан RPM1984 20 August 2010 в 01:55
поделиться