未捕获的类型错误:无法设置未定义属性“unobtrusive”

5

我正在使用最新的MVC框架和bundles。

MVC创建的默认“jqueryval”bundle导致了javascript错误。

我的页面上的脚本输出如下:

<!-- In head -->
<script src="/Scripts/modernizr-2.6.2.js"></script>
<script src="/Scripts/jquery-2.0.2.js"></script>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript" src="/Content/Misc.js"></script>


<!-- Bottom of doc -->
<script src="/Scripts/jquery.unobtrusive-ajax.js"></script>
<script src="/Scripts/jquery.validate.unobtrusive.js"></script>

我的捆绑包:

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

出了什么问题?


1
这可能是一个愚蠢的问题,但你的页面上实际上包含了 jQuery 吗?它似乎在引用未定义的对象,而该对象应该是 jQuery。 - Ian
是的 :D 欢迎提出愚蠢的问题(谁知道呢!)哈哈 - Chris
2
看起来正确的文件没有被输出。你不需要 jquery.validate.jsjquery.validate.unobtrusive.js(按照这个顺序)吗?为什么会输出 jquery.unobtrusive-ajax.js?我认为 validate.unobtrusive 需要 validate - Ian
1
就是这样!最近合并时文件不知怎么丢失了!谢谢。 - Chris
@Chris 很棒,很高兴我们找到了问题的根源!我添加了一个答案来总结我们发现的内容 :) - Ian
显示剩余5条评论
2个回答

8
在您的捆绑包中,您将其设置为包括jquery.validate*jquery.unobtrusive*,这通常会起作用。但是,如果您查看输出,不是所有应该有的文件都在那里。问题在于,jquery.unobtrusive.validate需要包含jquery.validate(正如您可以看到的那样,输出中没有包含它)。显然,这些文件实际上不存在于您的项目中,因此无法被捆绑器找到。请确保在您的项目中拥有所有必需的文件,以便您的捆扎器可以找到它们并进行输出。

0

我发现将通配符替换为完整的js脚本名称可以解决问题。

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

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