我们在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);
}
导致这种情况的原因是什么?
答案 0 :(得分:1)
经过一些调查,发现这个问题是由于表格的TextBoxFor
位于HTML表格内而发生的(是的,布局表格 - 这个页面是十年之久的asp的副本正在被淘汰的页面。)
对此的修复是添加style = "table-layout:fixed;"
声明添加<table>
的解决方法。