У нас проблема с проверкой на стороне клиента в проекте MVC2.
Существует модель представления, содержащая следующее свойство
[Required(ErrorMessage = "First Name is required")]
public string FirstName { get; set; }
В соответствующем представлении имеем
<% using (Html.BeginForm("Save", "User", FormMethod.Post))
{
%>
<!-- code removed -->
<%= Html.ValidationMessageFor(model => model.UserInfo.FirstName)%>
<%= Html.TextBoxFor(model => model.UserInfo.FirstName)%>
<!-- code removed -->
<% } %>
Проблема возникает, когда пользователь нажимает кнопку отправки формы и FirstName
пусто. Браузер (в данном случае IE8) зависает, выполняя JavaScript в бесконечном цикле.
Если мы удалим атрибут Required
, то проблема не возникнет (но, конечно, мы не увидим сообщение об ошибке проверки).
Неприятный раздел JavaScript находится в MicrosoftAjax.debug.js
, в функции
var $addHandler = Sys.UI.DomEvent.addHandler = function Sys$UI$DomEvent$addHandler(element, eventName, handler) {
в следующем разделе. Смотрите подробности в комментариях
else if (element.attachEvent) {
browserHandler = function() {
var e = {}; // we end up back here...
try {e = Sys.UI.DomElement._getWindow(element).event} catch(ex) {}
return handler.call(element, new Sys.UI.DomEvent(e)); // ...when this line executes
}
element.attachEvent('on' + eventName, browserHandler);
}
Что может быть причиной этого?