17

我的 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)。“数据”未定义,“返回”行是发生错误的地方:

parseJSON: function( data ) {
    // Attempt to parse using the native JSON parser first
    if ( window.JSON && window.JSON.parse ) {
        return window.JSON.parse( data );
    }

据推测,我不必在文本框中输入任何内容(然后应该得到“必填字段”消息)。这是导致错误的原因吗?这没有意义,但我看不出还有什么可能。

4

2 回答 2

23

原因

jquery.validate.unobtrusive.js这是ASP.NET.MVC 包中的一个问题。

从 jQuery 1.9 开始, 的行为发生parseJSON()了变化,一个undefined值将被视为格式错误的 JSON,从而导致您指定的错误。有关更多信息,请参阅jQuery 1.9 核心升级指南

解决方案

使用jQuery Migrate 插件,其中包括向 jQueryparseJSON()实用程序添加向后兼容性。


编辑

根据Microsoft Connect 上此线程中的官方公告,该问题已在最新版本的框架中得到解决

当然,正如 Andreas Larsen 在评论中指出的那样,确保在升级到新版本后清除任何相关的缓存、服务器端和客户端。

于 2013-02-11T23:17:26.477 回答
6

我也有这个问题。问题是 $.parseJSON(undefined) 导致抛出异常,并且不显眼的验证正在发出该调用。如已接受的答案中所述,此问题已得到修复。

您可以下载此脚本的 Microsoft 版本,该脚本将正确验证而不会导致此链接异常: http: //ajax.aspnetcdn.com/ajax/mvc/5.1/jquery.validate.unobtrusive.min.js

于 2014-09-23T21:05:39.757 回答