繁体   English   中英

ASP.NET MVC客户端验证陷入无限循环

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM