2011-02-01 9 views
1

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); 
} 

これは何が原因でしょうか?

答えて

1

調査の結果、この問題はフォームのTextBoxForがHTMLテーブル内にあるために発生することが判明しました(はい、レイアウトのテーブル - このページは10歳のASPページのコピーです分解される)。

これは、宣言にstyle = "table-layout:fixed;"を追加する回避策を追加することでした。

詳細はhttp://forums.asp.net/p/1515784/3826207.aspx

です。
関連する問題