在不显眼的验证期间使用parseJSON语法错误

bir*_*dus 17 asp.net-mvc jquery-validate unobtrusive-validation jquery-1.9 jquery-1.10

我的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();
.
.
.
Run Code Online (Sandbox Code Playgroud)

这是发生语法错误的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 );
    }
Run Code Online (Sandbox Code Playgroud)

据推测,我不必在文本框中输入任何内容(然后应该得到"字段是必需的"消息).这是导致错误的原因吗?这没有意义,但我不知道它还能是什么.

Boa*_*oaz 23

原因

这是jquery.validate.unobtrusive.jsASP.NET.MVC包中的问题.

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

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


编辑

根据Microsoft Connect上主题中的官方声明,该问题已在最新版本的框架中得到解决.

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

  • @firepol你可以发布链接到你尝试过的似乎适合你的新软件包吗?我刚刚从nuget(2.0.30116.0)得到的那些似乎没有解决任何问题.在这里看到我的评论:http://connect.microsoft.com/VisualStudio/feedback/details/776965/please-support-jquery-v1-9-0-properly-in-jquery-validate-unobtrusive (4认同)
  • 我是第二个.截至今天运行的最新版本(2月18日发布的2.0.30116.0 nuget)并未修复此验证错误. (3认同)
  • 是的,我刚发现它.刷新浏览器缓存似乎可以解决问题.我注意到,在Visual Studio中出现错误时看到的动态代码与刚刚通过nuget安装的新文件不匹配.这让我发现它是一个陈旧的客户端缓存.在此之前,我还删除了所有bin和obj文件夹,希望清除javascript捆绑的任何服务器端缓存.清除服务器端和客户端的组合可能是必要的. (3认同)

Tra*_*s J 6

我也有这个问题.问题是$ .parseJSON(undefined)导致抛出异常,并且不引人注意的验证正在进行该调用.如接受的答案所述,此后已经修复.

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