这是我在局部视图中的代码
@model Contoso.MvcApplication.Models.Exercises.AbsoluteArithmetic
@using(Html.BeginForm())
{
<div>
<span style="width: 110px; float:left; text-align:center; font-size:2.5em;">@Model.Number1</span>
<span style="width: 110px; float:left; text-align:center; font-size:2.5em;">+</span>
<span style="width: 110px; float:left; text-align:center; font-size:2.5em;">@Model.Number2</span>
<span style="width: 110px; float:left; text-align:center; font-size:2.5em;">=</span>
<span>
@Html.EditorFor(model => model.Result)
@Html.ValidationMessageFor(model => model.Result)
</span>
</div>
}
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
请注意我的代码底部,我有一个@section
,我意识到如果我在那里设置一个断点,它就没有运行。如果我在_Layout.cshtml中移动该行,则效果很好,但这不是主意。
如何在部分剃刀视图中告诉MVC4我想添加该库?
您可以将@Scripts.Render("~/Scripts/my-script.js")
用于.js文件,将@Styles.Render("~/Content/my-Stylesheet.css")
用于css文件。
Nb:它适用于特定的捆绑包更多细节 - 'http://www.asp.net/mvc/overview/performance/bundling-and-minification'
它适用于剃刀中的任何子页面,包括部分视图。有关这些帮助程序的使用的更多信息谷歌
您无法从局部渲染布局部分。将节定义移动到父页面或布局。
查看我的答案How to render a Section in a Partial View,它允许您在任何视图/局部视图中定义脚本和样式。它还负责重复包含。
我个人认为,部分不是一个很好的解决方案的样式和JavaScript包括。
此问题没有通用解决方案,但您可以采用以下最简单的方法:
1)您可以创建一组扩展方法,如下所示:
2)只需将您的javascript代码移动到单独的局部视图和主视图中,即可渲染2个部分视图。一个用于主要局部视图,另一个用于脚本,如下所示:
{
// markup and razor code for Main View here
@Html.Partial("Main_PartialView")
}
@section Scripts
{
@Html.Partial("JavaScript_PartialView")
}
希望能帮助到你。
您可以直接在部分视图html的末尾添加脚本,不带脚本部分(因为脚本部分不在部分视图中呈现)
<script language="javascript">
// Your scripts here
// ....
</script>
这对我有用,允许我在同一文件中为部分视图配置JavaScript和HTML,以便于阅读
在View中使用名为“_MyPartialView.cshtml”的部分视图
<div>
@Html.Partial("_MyPartialView",< model for partial view>,
new ViewDataDictionary { { "Region", "HTMLSection" } } })
</div>
@section scripts{
@Html.Partial("_MyPartialView",<model for partial view>,
new ViewDataDictionary { { "Region", "ScriptSection" } })
}
在部分视图文件中
@model SomeType
@{
var region = ViewData["Region"] as string;
}
@if (region == "HTMLSection")
{
}
@if (region == "ScriptSection")
{
<script type="text/javascript">
</script">
}
这个Stackoverflow页面提供了这个问题的完整解决方案:Using sections in Editor/Display templates
TL; DR:只需将Forloop.HtmlHelpers nuget包https://www.nuget.org/packages/Forloop.HtmlHelpers/添加到您的项目中,以允许您从ASP.NET MVC中的Razor部分视图和模板运行Javascript。我亲自将它用于我的MVC 5项目。
如果您只想在某些部分视图中包含特定脚本,并避免在整个应用程序中不必要地散布它们,您可以执行以下操作:
在BundleConfig.cs
中定义指向空javascript文件的包:
bundles.Add(new ScriptBundle("~/bundles/empty").Include(
"~/Scripts/empty.js"
));
在_Layout.cshtml
的head部分中,添加以下变量:
@{
ViewBag.AdditionalBundle = String.IsNullOrEmpty(ViewBag.AdditionalBundle) ? "~/bundles/empty" : ViewBag.AdditionalBundle;
}
在_Layout.cshtml
的底部,渲染您想要的任何其他包:
@Scripts.Render("~/bundles/lib")
@Scripts.Render(@ViewBag.AdditionalBundle);
@RenderSection("scripts", required: false)
最后,在需要任何特定脚本的局部视图中,只需将相应的包添加到变量中:
ViewBag.AdditionalBundle = "~/bundles/mySpecificBundle";
部分视图在_Layout.cshtml
之前呈现,因此您需要在文件顶部进行验证。它是这样的:如果任何部分视图为ViewBag.AdditionalBundle
分配了值,那么使用它。否则,渲染一个空脚本。