无法获取属性'unobtrusive'的值:对象为null或未定义

8
当我运行代码时,我遇到了这个错误:
Unable to get value of the property 'unobtrusive': object is null or undefined

这很正常,但我正在添加所有需要的jQuery内容:

jquery.validate-vsdoc.js
jquery.validate.js
jquery.validate.min.js
jquery.validate.unobtrusive.js
jquery.validate.unobtrusive.min.js
jquery.unobtrusive-ajax.js
jquery.unobtrusive-ajax.min.js

我在主表单上加载了这个:

我在主表单上加载了这个:

@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryui")
@Scripts.Render("~/bundles/jqueryval")

我的bundle配置如下:

bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
            "~/Scripts/jquery-{version}.js"));

bundles.Add(new ScriptBundle("~/bundles/jqueryui").Include(
            "~/Scripts/jquery-ui-{version}.js"));

bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
            "~/Scripts/jquery.unobtrusive*",
            "~/Scripts/jquery.validate*"));

我在我的Script文件夹中有所有相关的文件。
为什么会出现这个错误? 如果需要查看任何文件,请评论,我会很乐意发布它。
编辑: 脚本已加载(我检查过) 这行代码导致错误:
jQuery.validator.unobtrusive.prototype.parse.call(this, selector);

错误:

SCRIPT5007: Unable to get value of the property 'unobtrusive': object is null or undefined 

如果你确定所有文件都在那里(例如,“jquery.validate.unobtrusive.js”?),你应该使用“grep”命令或“Notepad ++”搜索所有脚本,查找“unobtrusive”元素。 - Pragmateek
我在2分钟前从包管理器控制台执行了update-packages,所以它们应该是正确的。 - AAlferez
我已经检查过了,该元素存在。 - AAlferez
请确保使用像Firebug、Chrome或您拥有的调试器正确加载脚本到客户端页面。此外,请尝试在代码页面中直接引用您的脚本,使用“script”标签。当使用类似bundle的包装器时,您可能会遇到这种问题。 - Pragmateek
是的,它们存在,并且这行代码给我报错: jQuery.validator.unobtrusive.prototype.parse.call(this, selector); - AAlferez
5个回答

9

找到了问题所在。

我有另一个部分视图,其中添加了一个脚本“~/Scripts/jquery…”

因此,我在主视图中有捆绑包,在始终呈现的菜单的部分中有一个捆绑包。 似乎只考虑了最后一个,并且Unobtrusive没有被添加到那里。 从部分视图中删除它,只留下主视图中的一个解决了这个问题。

感谢您的猜测。


1
非常感谢。我为此问题奋斗了五个多小时。 - nishantvodoo

4
我得到了这个解决方案,但是原因很愚蠢。我在页面上先放置了jquery.validate.unobtrusive.js文件,然后才是jquery.validate.min.js文件。
只需将validate文件移动到validate.validate.unobtrusive文件的前面即可解决问题。

2
我因为不同的原因得到了这个错误消息,所以我想分享一下。
我们使用微软的CDN来提供jquery.validate.min.js文件,但是我们的客户使用了一个过滤器,在黑名单中将asp.netcdn.com阻止,导致文件无法加载。
因此,让客户将CDN加入白名单或更改CDN可以解决这个问题。实际上,如果CDN不可用,我们应该设置备用方案,使用本地版本进行服务,但我们尚未实现该功能。

0

我也遇到了这个问题。尽管安装了 Unobtrusive和Unobtrusive验证的nuget包,我仍然收到了错误信息。

在我的情况下,这是因为我忘记包含其中一个必需库。原来jquery.validate.unobtrusive.min.js依赖于jquery.validate.min.js。所以应该包括以下附加脚本文件:

<script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.js"></script>

-2
“Code Junkie” 的意思是,你是否已经在 web.config 中添加了不显眼的启用 JavaScript 的键。
你需要在 appSettings 中添加以下内容:
<appSettings>
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接