【问题标题】:The file "~/Views/Position/Edit.cshtml" cannot be requested directly because it calls the "RenderSection" method无法直接请求文件“~/Views/Position/Edit.cshtml”,因为它调用了“RenderSection”方法
【发布时间】:2011-12-10 03:18:51
【问题描述】:

我正在尝试将我可以在部分中重复使用的所有东西分开,这样我维护起来会更容易。

但是我得到了这个例外: 无法直接请求文件“~/Views/Position/Edit.cshtml”,因为它调用了“RenderSection”方法

我创建了一个名为sections.cshtml 的文件,其内容如下:

@section scripts{
    <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
}

在 _layout.cshtml 文件中我将其更改为:

<head>
    <meta charset="utf-8" />
    <title>@ViewBag.Title</title>
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
    @RenderSection("scripts", required:false)
    @*<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/modernizr-1.7.min.js")" type="text/javascript"></script>*@
</head>

当我转到浏览器中的视图并检查它只显示的源代码时:

<head>
    <meta charset="utf-8" />
    <title>Edit</title>
    <link href="/Content/Site.css" rel="stylesheet" type="text/css" />
</head>

【问题讨论】:

  • 为什么不把脚本放到你的布局文件中?
  • 只是想学习如何使用 mvc 中的部分,但是这也是一个选项,但是如果某些脚本将用于某些视图,而其他脚本将用于其他视图呢?部分会解决这个问题,但布局文件不会解决它,对吧?
  • 摆脱@RenderSection,只需将脚本放入......这是布局文件的重点,用于存储大多数页面中常见的内容。
  • 您是否将@section 脚本{} 放入您的 Edit.cshtml 文件中?那是你把它放在哪里,而不是在一个单独的文件中。

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-2 razor


【解决方案1】:

RenderSection 只能存在于布局文件(即母版页)中...其目的是允许您可以直接请求的页面针对布局的各个部分(布局是所有选择使用它的页面共有的文件) 并为这些不同的部分提供内容。

如果您想将此部分分离为可在许多页面上重复使用的内容,则应将其放在部分中并将 rendersection 调用替换为类似的内容

@Html.Partial("Scripts")

【讨论】:

  • 请检查编辑,我尝试使用布局文件而不是部分视图来完成它并且它不起作用,我也没有得到异常。
  • 如果我将 section required 更改为 true,它会给我这个异常:Section not defined: "scripts",我是否需要将该部分放在其他地方??
  • 那是因为您直接请求的文件需要将其中的部分标记为@section script{....},其中...包含应该进入的内容在调用 @RenderSection("scripts") 的位置的布局文件......部分不是用于定义通用功能。这就是partials的用途
  • Sections 用于定义布局页面中内容应该进入的区域(例如页脚)。但是对于您请求的每个页面,该内容会有所不同
  • 我有一个布局>页面>部分。我需要一些脚本和样式在&lt;head/&gt; 中引用和加载,只有当这个部分存在时,我应该怎么做。我不明白这个愚蠢的约束的意义。
【解决方案2】:

或者,您可以使用helper 来分隔您经常使用的代码。特别是如果您因为提到的 Martin-Booth 约束而无法使用 sections

@helper Scripts(){
    <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
}

而用法只是:

<somehtml />
@Scripts()
<somehtml />

【讨论】:

  • 如果脚本应该放在 标签中怎么办?
猜你喜欢
  • 2017-11-04
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 2020-01-06
  • 2021-07-11
  • 2021-10-05
  • 1970-01-01
  • 2023-03-12
相关资源
最近更新 更多