无法直接请求文件"〜/ Views/Position/Edit.cshtml",因为它调用"RenderSection"方法

Lui*_*cia 40 asp.net-mvc razor asp.net-mvc-3 asp.net-mvc-2

我试图将我可以在部分重用的所有内容分开,这样我就可以更容易地进行维护.

但是我得到了这个例外:无法直接请求文件"〜/ 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>
}
Run Code Online (Sandbox Code Playgroud)

在_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>
Run Code Online (Sandbox Code Playgroud)

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

<head>
    <meta charset="utf-8" />
    <title>Edit</title>
    <link href="/Content/Site.css" rel="stylesheet" type="text/css" />
</head>
Run Code Online (Sandbox Code Playgroud)

Mar*_*oth 36

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

如果你想把这个部分分开作为可在许多页面上恢复的东西你应该把它放在一个部分并将rendersection调用替换为类似的东西

@Html.Partial("Scripts")
Run Code Online (Sandbox Code Playgroud)

  • 我有一个布局>页面>部分.我需要一些脚本和样式来引用和加载到`<head />`只有当这个部分存在时,我应该怎么做.我不明白这个愚蠢的约束. (2认同)

Ger*_*ald 13

或者,您可以helper使用更频繁地分隔您使用的代码.特别是如果sections因为Martin-Booth提到的约束而无法使用.

@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>
}
Run Code Online (Sandbox Code Playgroud)

用法只是:

<somehtml />
@Scripts()
<somehtml />
Run Code Online (Sandbox Code Playgroud)

  • 如果脚本应该放在<head>标签中怎么办? (3认同)