【问题标题】:ASP.NET MVC - How to render a @section in a partal view with parameters?ASP.NET MVC - 如何在带有参数的部分视图中呈现@section?
【发布时间】:2016-03-21 20:12:40
【问题描述】:

我使用局部视图来呈现页面的内容。 通常,我使用部分来通过使用 @section

为内容呈现特定的脚本和 CSS

我的基本网址是{Controller}/{Action}/{Id}

对于像{Controller}/{Action} 这样的网址,即。 Product/Create,部分和页面渲染正常。

但是当我的网址是{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 作为查询字符串传递时

我该如何解决这个问题?

【问题讨论】:

  • 这里没有足够的信息来开始。尝试提供一些代码来说明您的问题。
  • 你是如何包含你的 css 的?你能显示代码吗?检查您的浏览器网络选项卡是否有 404 错误。这将使您了解它失败的原因
  • @ErikFunkenbusch 我编辑了我的帖子
  • @Shyju 我编辑了我的帖子
  • @Mikahel 查看我发布的答案。

标签: asp.net-mvc razor asp.net-mvc-partialview


【解决方案1】:

您包含 css 文件的方式不正确!

您应该使用~/ 而不是../。 Razor 会将~ 转换为应用的根路径。

这应该可行。

<link href="~/assets/global/plugins/bootstrap-switch/css/bootstrap-switch.min.css" rel="stylesheet" type="text/css" />

假设assets 文件夹位于您的应用根目录中。

有了这个,无论您在哪个页面/网址,您的链接都不会被破坏。

你也应该这样做来包含 js 文件。

【讨论】:

  • 没有任何区别。 ../ 工作正常。注意连Layout CSS都没有生成,不仅仅是partial的CSS
  • 您也需要在布局中执行此操作。 (无论您在哪里包含任何资源)
【解决方案2】:

听起来您缺少共享布局。如果您在编辑 cshtml 的顶部有类似的内容,请尝试将其取出。

@{
    Layout = null;
}

如果不存在,也许您需要指定布局,您可以复制您创建的 cshtml 中的任何内容,例如:

@{
    Layout = "~/Views/Shared/MyLayoutPage.cshtml";
}

【讨论】:

  • 我确实有我的布局。请在我的问题中查看新的更新
猜你喜欢
  • 1970-01-01
  • 2011-07-23
  • 1970-01-01
  • 1970-01-01
  • 2012-11-30
  • 1970-01-01
  • 2015-05-22
相关资源
最近更新 更多