Обновить список ValidationSummary на управляющих пятнах?
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 ответ
Вот серверный подход для получения атрибута onblur во всех TextBoxes (который также должен работать с группами проверки):
- Создайте класс, производный от 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 для страниц