MVC2プロジェクトでクライアント側の検証に問題があります。ASP.NET MVCのクライアント側の検証が無限ループでスタックされました
は、我々は、ユーザーがフォームの送信ボタンをヒットし、FirstName
が空の場合、問題が発生
<% using (Html.BeginForm("Save", "User", FormMethod.Post))
{
%>
<!-- code removed -->
<%= Html.ValidationMessageFor(model => model.UserInfo.FirstName)%>
<%= Html.TextBoxFor(model => model.UserInfo.FirstName)%>
<!-- code removed -->
<% } %>
を持って対応するビューでは、次のプロパティ
[Required(ErrorMessage = "First Name is required")]
public string FirstName { get; set; }
を含むビューモデルがあります。ブラウザ(この場合はIE8)がハングアップし、JavaScriptを無限ループで実行します。
Required
属性を削除すると、問題は発生しません(ただし、検証エラーメッセージは表示されません)。
のJavaScriptの問題のセクションでは、次のセクションで
var $addHandler = Sys.UI.DomEvent.addHandler = function Sys$UI$DomEvent$addHandler(element, eventName, handler) {
関数で、MicrosoftAjax.debug.js
です。詳細については、インラインコメントを参照してください。
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);
}
これは何が原因でしょうか?