ASP.NET MVC - 如何在带参数的局部视图中呈现@section?
ASP.NET MVC - How to render a @section in a partal view with parameters?
我使用部分视图来呈现页面内容。
通常,我使用部分来呈现特定的脚本,并使用 @section
CSS 来呈现内容
我的基本 url 是 {Controller}/{Action}/{Id}
对于 url 像 {Controller}/{Action}
即。 Product/Create
,部分和页面呈现正常。
但是当我的 url 是 {Controller}/{Action}/{Id}
即。 Product/Edit/2
,CSS 和脚本不存在,我只得到一个普通的 HTML 页面。
我的布局:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>@ViewBag.Title</title>
<!-- CSS FILES -->
<link href="../assets/global/plugins/bootstrap-switch/css/bootstrap-switch.min.css" rel="stylesheet" type="text/css" />
<!-- BEGIN RENDER CSS SECTION EXISTING IN PARTIAL -->
@RenderSection("Style", required: false)
<!-- END RENDER CSS SECTION EXISTING IN PARTIAL -->
<link href="../assets/global/css/components.min.css" rel="stylesheet" id="style_components" type="text/css" />
<link rel="shortcut icon" href="favicon.ico" />
</head>
<body>
<div class="header">
@Html.Partial("_Header")
</div>
<div class="container">
<div class="sidebar">
@Html.Partial("_Sidebar")
</div>
<div class="content">
@RenderBody()
</div>
</div>
<!-- JAVASCRIPT FILES -->
<script src="../assets/global/plugins/bootstrap-switch/js/bootstrap-switch.min.js" type="text/javascript"></script>
<!-- RENDER JAVASCRIPT SECTION EXISTING IN PARTIAL -->
@RenderSection("Scripts", required: false)
<!-- RENDER JAVASCRIPT SECTION EXISTING IN PARTIAL -->
<script src="../assets/layouts/layout/scripts/layout.min.js" type="text/javascript"></script>
</body>
</html>
我的局部视图结构:
@model IEnumerable<Backend.Models.Product>
@{
ViewBag.Title = "Product";
}
@section Style {
SPECIFIC CSS URLS TO THE VIEW
}
HTML CODE
@section Scripts{
SPECIFIC JAVASCRIPT URLS TO THE VIEW
}
我怀疑 URL 中的附加 {Id}
是什么弄乱了代码,因为以下内容:
与 {Id}
当 Id 作为查询字符串传递时
我该如何解决这个问题?
听起来您缺少共享布局。如果您在编辑 cshtml 的顶部有类似这样的内容,请尝试将其删除。
@{
Layout = null;
}
如果没有,也许您需要指定布局,您可以复制创建的 cshtml 中的任何内容,例如:
@{
Layout = "~/Views/Shared/MyLayoutPage.cshtml";
}
您包含 css 文件的方式不正确!
您应该使用 ~/
而不是 ../
。 Razor 会将 ~
转换为您应用的根路径。
这应该有效。
<link href="~/assets/global/plugins/bootstrap-switch/css/bootstrap-switch.min.css" rel="stylesheet" type="text/css" />
假设 assets
文件夹在您的应用根目录中。
有了这个,无论您 page/url 使用什么,您的 link 都不会损坏。
您也应该对包含 js 文件执行相同的操作。
我使用部分视图来呈现页面内容。 通常,我使用部分来呈现特定的脚本,并使用 @section
CSS 来呈现内容我的基本 url 是 {Controller}/{Action}/{Id}
对于 url 像 {Controller}/{Action}
即。 Product/Create
,部分和页面呈现正常。
但是当我的 url 是 {Controller}/{Action}/{Id}
即。 Product/Edit/2
,CSS 和脚本不存在,我只得到一个普通的 HTML 页面。
我的布局:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>@ViewBag.Title</title>
<!-- CSS FILES -->
<link href="../assets/global/plugins/bootstrap-switch/css/bootstrap-switch.min.css" rel="stylesheet" type="text/css" />
<!-- BEGIN RENDER CSS SECTION EXISTING IN PARTIAL -->
@RenderSection("Style", required: false)
<!-- END RENDER CSS SECTION EXISTING IN PARTIAL -->
<link href="../assets/global/css/components.min.css" rel="stylesheet" id="style_components" type="text/css" />
<link rel="shortcut icon" href="favicon.ico" />
</head>
<body>
<div class="header">
@Html.Partial("_Header")
</div>
<div class="container">
<div class="sidebar">
@Html.Partial("_Sidebar")
</div>
<div class="content">
@RenderBody()
</div>
</div>
<!-- JAVASCRIPT FILES -->
<script src="../assets/global/plugins/bootstrap-switch/js/bootstrap-switch.min.js" type="text/javascript"></script>
<!-- RENDER JAVASCRIPT SECTION EXISTING IN PARTIAL -->
@RenderSection("Scripts", required: false)
<!-- RENDER JAVASCRIPT SECTION EXISTING IN PARTIAL -->
<script src="../assets/layouts/layout/scripts/layout.min.js" type="text/javascript"></script>
</body>
</html>
我的局部视图结构:
@model IEnumerable<Backend.Models.Product>
@{
ViewBag.Title = "Product";
}
@section Style {
SPECIFIC CSS URLS TO THE VIEW
}
HTML CODE
@section Scripts{
SPECIFIC JAVASCRIPT URLS TO THE VIEW
}
我怀疑 URL 中的附加 {Id}
是什么弄乱了代码,因为以下内容:
与 {Id}
当 Id 作为查询字符串传递时
我该如何解决这个问题?
听起来您缺少共享布局。如果您在编辑 cshtml 的顶部有类似这样的内容,请尝试将其删除。
@{
Layout = null;
}
如果没有,也许您需要指定布局,您可以复制创建的 cshtml 中的任何内容,例如:
@{
Layout = "~/Views/Shared/MyLayoutPage.cshtml";
}
您包含 css 文件的方式不正确!
您应该使用 ~/
而不是 ../
。 Razor 会将 ~
转换为您应用的根路径。
这应该有效。
<link href="~/assets/global/plugins/bootstrap-switch/css/bootstrap-switch.min.css" rel="stylesheet" type="text/css" />
假设 assets
文件夹在您的应用根目录中。
有了这个,无论您 page/url 使用什么,您的 link 都不会损坏。
您也应该对包含 js 文件执行相同的操作。