【问题标题】:Syntax error with parseJSON during unobtrusive validation在不显眼的验证期间 parseJSON 的语法错误
【发布时间】:2023-03-12 23:53:01
【问题描述】:

我的 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 );
    }

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

【问题讨论】:

  • 我认为从您在此处显示的内容看不出该错误。尝试在发生错误的 jQuery 代码中放置一个断点,然后回顾堆栈跟踪以查看它是从哪里调用的。这将为您提供有关为什么将 null 传递给此函数的线索。
  • 会的。当我发现有用的东西时,我会回来的。谢谢。
  • 请在此处投票,以便微软尽快更正:connect.microsoft.com/VisualStudio/feedback/details/776965/…
  • 添加了 jquery 1.10 标签,因为它也是这个问题

标签: asp.net-mvc jquery-validate unobtrusive-validation jquery-1.9 jquery-1.10


【解决方案1】:

原因

这是您的 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 在 cmets 中指出的那样,确保在升级到新版本后清除所有相关的缓存、服务器端和客户端。

【讨论】:

  • @birdus 没问题。 jQuery 1.9 的发布在很多框架中引起了很多这样的问题。
  • 请在这里投票,以便微软尽快更正:connect.microsoft.com/VisualStudio/feedback/details/776965/…
  • @firepol 您可以发布指向您尝试过的似乎对您有用的新软件包的链接吗?我刚从 nuget (2.0.30116.0) 得到的那些似乎没有解决任何问题。在这里查看我的评论:connect.microsoft.com/VisualStudio/feedback/details/776965/…
  • 我支持这个。截至今天运行最新(2.0.30116.0 于 2 月 18 日在 nuget 上发布)无法修复此验证错误。
  • 是的,我刚刚发现了它。刷新浏览器缓存似乎可以解决问题。我注意到您在 Visual Studio 中遇到错误时看到的动态代码与我刚刚通过 nuget 安装的新文件不匹配。这让我发现这是一个陈旧的客户端缓存。在此之前,我还删除了所有 bin 和 obj 文件夹,希望清除 javascript 捆绑的任何服务器端缓存。可能需要同时清除服务器端和客户端。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-22
    相关资源
    最近更新 更多