Обновить список ValidationSummary на управляющих пятнах? - PullRequest
1 голос
/ 29 мая 2009

ValidationSummary покажет список ошибок при обратной передаче. Поскольку каждое поле исправлено, его валидатор запускается, и любой проверочный текст исчезает. Я также хочу автоматически обновить ValidationSummary.

отлично работает следующее:

<asp:TextBox ID="ForenameTextBox" onblur="ValidationSummaryOnSubmit()" runat="server" />

но это не идеально, поскольку это означает изменение и поддержание этого на всех полях. (ValidationSummaryOnSubmit - это функция Microsoft.) Поэтому я попытался сделать это динамически:

addEvent(window, "load", UpdateValidationSummary);

function addEvent(obj, evType, fn) {
    if (obj.addEventListener) {
        obj.addEventListener(evType, fn, true);
    } else {
        if (obj.attachEvent) {
            var r = obj.attachEvent("on" + evType, fn);
            return r;
        }
    }
}

function removeEvent(obj, evType, fn) {
    if (obj.removeEventListener) {
        obj.removeEventListener(evType, fn, true);
        return true;
    } else if (obj.detachEvent) {
        var r = obj.detachEvent("on" + evType, fn);
        return r;
    }
}

function UpdateValidationSummary() {
    if (typeof (Page_Validators) == "undefined") {
        return;
    }
    var i, val, ctrl;
    for (i = 0; i < Page_Validators.length; i++) {
        val = Page_Validators[i];
        if (val.controltovalidate != null && val.controltovalidate != "") {
            ctrl = document.getElementById(val.controltovalidate);
            if (ctrl != null && typeof (ValidationSummaryOnSubmit) == "function") {
                //add call to ValidationSummary on blur
                addEvent(ctrl, "blur", ValidationSummaryOnSubmit);
            }
        }
    }
}

Это не работает, хотя - весь ValidationSummary исчезает, когда одно поле фиксировано, и функция ValidationSummaryOnSubmit, кажется, вызывается дважды. Если я использую простое присваивание вместо функции addEvent, это работает, но я хочу обработать поля, которые могут уже иметь место в событии onBlur.

В принципе, я думаю, что мне просто нужно добавить вызов функции ValidationSummaryOnSubmit в «список» обработчиков onBlur для каждого элемента управления. Почему приведенный выше код, кажется, не делает этого?

1 Ответ

1 голос
/ 29 мая 2009

Вот серверный подход для получения атрибута onblur во всех текстовых окнах (который также должен работать с группами проверки):

  • Создать класс, производный от TextBox, например TextBoxEx
  • Добавьте атрибут в этот производный класс, например, this.Attributes.Add("onblur", string.Format("ValidationSummaryOnSubmit('{0}')", this.ValidationGroup);
  • Используйте сопоставление тегов, чтобы все ваши существующие теги <asp:TextBox> продолжали работать: <system.web> <pages> <tagMapping> <add tagType="System.Web.UI.WebControls.TextBox" mappedTagType="MyControls.TextBoxEx"/> </tagMapping> </pages> </system.web>

Другим способом было бы использовать ControlAdapters для добавления атрибута.

Соответствующие ссылки:
Общие сведения о проверке ASP.NET
MSDN - элемент tagMapping для страниц

...