2011-02-01 21 views
1

我們遇到了MVC2項目中的客戶端驗證問題。ASP.NET MVC客戶端驗證卡在無限循環中

有包含以下屬性

[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 --> 
<% } %> 

當用戶點擊表單提交按鈕,0​​是空的問題就出現了。瀏覽器(本例中爲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); 
} 

什麼可能導致這種情況?

回答

1

經過一番調查,發現這個問題是由於表格中的TextBoxFor位於HTML表格中(是的,用於佈局的表格 - 該頁面是一個十年前asp頁面的副本,被分解)。

修復此問題的方法是添加style = "table-layout:fixed;"<table>聲明的解決方法。

一些更多的細節在http://forums.asp.net/p/1515784/3826207.aspx