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 文件执行相同的操作。