Asp.net mvc 为什么我必须修改@Script.Render才能在HTML文档中包含脚本
在我意识到为了让jquery ui在ASP.NET MVC中工作,我需要添加Asp.net mvc 为什么我必须修改@Script.Render才能在HTML文档中包含脚本,asp.net-mvc,jquery-ui,Asp.net Mvc,Jquery Ui,在我意识到为了让jquery ui在ASP.NET MVC中工作,我需要添加@Scripts.Render(“~/bundles/jqueryui”)之前,这对我来说是一场噩梦。在执行此操作之前,我一直得到未捕获错误:未定义不是函数。我不明白的是,在检查html源代码时,当我在源代码中看到jQueryUI文件时,为什么会发生这种情况。这是_Layout.cshtml文件: <!DOCTYPE html> <html> <head> <sc
@Scripts.Render(“~/bundles/jqueryui”)
之前,这对我来说是一场噩梦。在执行此操作之前,我一直得到未捕获错误:未定义不是函数
。我不明白的是,在检查html源代码时,当我在源代码中看到jQueryUI文件时,为什么会发生这种情况。这是_Layout.cshtml文件:
<!DOCTYPE html>
<html>
<head>
<script src="~/Scripts/jquery-1.8.2.js"></script>
<script src="~/Scripts/jquery-ui-1.8.24.min.js"></script>
<link href="~/Content/themes/base/jquery-ui.css" rel="stylesheet" />
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
<script src="~/Scripts/jquery.plugins.js"></script>
<script src="~/Scripts/Helpers.js"></script>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<title>@ViewBag.Title</title>
@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/modernizr")
</head>
<body>
@RenderBody()
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryui")//Added later to get it working
@RenderSection("scripts", required: false)
</body>
</html>
如果我在_Layout.cshtml中省略了@Scripts.Render(“~/bundles/jqueryui”)
,我将得到上述错误。这段代码与任何普通html或web表单都能完美地配合使用。因此,文档似乎无法看到jQueryUI文件的内容。让我的问题具体化:
@Scripts.Render
中指定每个java脚本文件,那么为什么我的Helper.js文件没有任何问题~/bundles/jqueryui
路径指的是哪里李>
jquery ui依赖于jquery(即必须在jquery之后定义),但您已经复制了文件。在标题中,您包含了
,后面是jqueryui
。然后使用@Scripts.Render(“~/bundles/jquery”)
(现在在jqueryui之后)在文件末尾重新加载jquery
删除头部的脚本,它应该可以工作。此外,我建议您从头部删除jquery.validate和jquery.validate.unobtrusive,并在文件末尾使用@Scripts.Render(“~/bundles/jqueryval”)
(在@RenderSection..
之前)。您可以在App\u Start\BundleConfig.cs文件中检查这些捆绑包。使用捆绑包有许多优点(请参阅)
如果您在基于_布局的每个页面中使用所有这些文件,您可以定义自己的包以包含所有文件。您需要定义js的策略。我建议你先组织你的js,然后把它分成更小的部分。一个脚本应该是所有页面的通用脚本(在您的例子中是jQuery),其他用于验证的脚本应该只包含在具有一些编辑文件等的页面上
使用DRY原理,阅读一些关于js如何工作的信息。它在不久前帮了我很多忙,不会花很多时间。关于第三个问题,请参阅
App\u Start\BundleConfig.cs
Ans 2每个js文件都不需要指定给@Scripts.Render
@ArijitMukherjee,那么为什么jquery ui文件会被删除呢?答案1:它不应该像你提到的那样显示在源代码中,也不应该从头部删除query.validate和jquery.validate.unobtrusive并使用脚本。Render确实起作用。(我的意思是它仍然可以工作)但是从头部删除jquery和jqueryui并使用脚本。jQuery未定义为2。“未定义”不是一个函数。我已重新创建了您的布局。在jquery和jqueryui的头部和@Scripts.Render(“~/bundles/jquery”)
的结尾,我得到了错误。如果我删除。(“~/bundles/jquery”)
它可以正常工作。但是推荐的方法是从头部删除脚本,然后使用@scripts.Render(“~/bundles/jquery”)
,然后在末尾使用@scripts.Render(“~/bundles/jqueryui”)
。但是为什么在我的例子中不起作用呢。再次重复:我从head中删除了jquery和jqueryui,并使用了脚本。为它们进行渲染。我不知道~/scripts/jquery.plugins.js
或~/scripts/Helpers.js
中有什么内容,但如果在jquery和jquery ui之前加载,它们可能会导致问题。试着把它放在最后,看看这是否解决了错误。哈哈,我会告诉你为什么,因为我把jquery和jqueryui移到了body中,我在一个文件中使用了jqeury,我在头部引用了这个引用文件,引用文件在被引用文件之前。这就是问题的根源。非常感谢。现在一切都安排好了。
$('.txt-date').datepicker({
showAnim: "drop",
changeMonth: true,
changeYear: true,
dateFormat: "dd.mm.yy"
});