我的MVC应用正在生成以下HTML,导致提交时出现Javascript语法错误(我没有在两个文本框中输入任何内容)。这是生成的HTML和提交处理程序:
<form action="/UrIntake/Save" id="UrIntakeForm" method="post">
<input data-val="true" data-val-length="The field LastName must be a string with a maximum length of 50." data-val-length-max="50" data-val-required="The LastName field is required." id="FormSubmitter_LastName" name="FormSubmitter.LastName" type="text" value="" />
<input data-val="true" data-val-length="The field FirstName must be a string with a maximum length of 50." data-val-length-max="50" data-val-required="The FirstName field is required." id="FormSubmitter_FirstName" name="FormSubmitter.FirstName" type="text" value="" />
<div id="SubmissionButtons" class="right">
<input type="button" onclick="SubmitForm()" value="Submit" />
<input type="button" onclick="CancelForm()" value="Cancel" />
</div>
</form>
function SubmitForm() {
$("#UrIntakeForm").valid();
.
.
.
这是发生语法错误的jQuery代码(v1.9.0)。 “data”未定义,“return”行是发生错误的地方:
parseJSON: function( data ) {
// Attempt to parse using the native JSON parser first
if ( window.JSON && window.JSON.parse ) {
return window.JSON.parse( data );
}
据推测,我不必在文本框中输入任何内容(然后应该获得“字段是必填的”消息)。这是导致错误的原因吗?这没有意义,但我不知道它还能是什么。
答案 0 :(得分:23)
<强>原因强>
这是ASP.NET.MVC包中jquery.validate.unobtrusive.js
的问题。
从jQuery 1.9开始,parseJSON()
的行为发生了变化,undefined
值将被视为格式错误的JSON,导致您指定的错误。有关详细信息,请参阅jQuery 1.9 Core Upgrade Guide。
<强>解决方案强>
使用jQuery Migrate plugin,其中包括向jQuery parseJSON()
实用程序添加向后兼容性。
修改强>
根据此thread on Microsoft Connect中的官方公告,该问题已在最新版本的框架中得到解决。
当然,正如Andreas Larsen在评论中指出的那样,确保在升级到新版本后清除任何相关的缓存,服务器端和客户端。
答案 1 :(得分:6)
我也遇到过这个问题。问题是$ .parseJSON(undefined)导致抛出异常,并且不引人注意的验证正在进行该调用。如接受的答案中所述,此后已经修复。
您可以下载此脚本的Microsoft版本,该版本将正确验证,而不会导致此链接出现异常:http://ajax.aspnetcdn.com/ajax/mvc/5.1/jquery.validate.unobtrusive.min.js