[英]ASP.NET MVC client-side validation stuck in infinite loop
在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);
}
是什么原因造成的?
经过一番调查,发现此问题的发生是由于表单的TextBoxFor
位于HTML表中(是的,用于布局的表-该页面是已退役十年的asp页面的副本)。
解决此问题的方法是添加一种变通办法,即添加style = "table-layout:fixed;"
到<table>
声明。
有关更多详细信息,请访问http://forums.asp.net/p/1515784/3826207.aspx
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.