gpt4 book ai didi

c# - _Layout.cshtml不能直接请求,因为调用了 "RenderBody"方法

转载 作者:太空宇宙 更新时间:2023-11-03 12:27:08 26 4
gpt4 key购买 nike

我使用属性来路由。这是否相关,我不知道。

当我不使用“路由”属性时,共享 Controller 中的 _Layaout() 操作不起作用但页面正在呈现。

public class SharedController : Controller
{
// GET: Shared
[AllowAnonymous]
public ActionResult _Layout()
{

return View();
}
}

当我使用“路由”属性时,它确实有效,但出现以下错误:

public class SharedController : Controller
{
// GET: Shared
[AllowAnonymous]
[Route]
public ActionResult _Layout()
{

return View();
}
}

The file "~/Views/Shared/_Layout.cshtml" cannot be requested directly because it calls the "RenderBody" method.

还有global.asax

public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
"Default", // Route name
"{controller}/{action}/", // URL with parameters
new { controller = "Home", action = "Index" } // Parameter defaults
);
}

编辑:

_Layout.cshtml

 @model OgrenciEvi.Models.ViewModel

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>@ViewBag.Title - Ogrencievi.net</title>
<link href="~/Content/Site.css" rel="stylesheet" type="text/css" />
<link href="~/Content/bootstrap.min.css" rel="stylesheet" type="text/css" />
<link href="~/Content/font-awesome.min.css" rel="stylesheet" />
<link href="~/Content/tether.css" rel="stylesheet" type="text/css" />

<link rel="icon" type="image/png" href="~/Image/favicon.ico" />

<script src="@Url.Content("~/Scripts/jquery-3.0.0.min.js")"></script>
<script src="@Url.Content("~/Scripts/tether.js")"></script>
<script src="@Url.Content("~/Scripts/bootstrap.min.js")"></script>
<script src="http://code.jquery.com/jquery-1.10.2.js"></script>
<script src="http://code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
</head>
<body class="p-0">

@Html.Partial("Navbar")
<div class="container-fluid p-0">
@RenderBody()

</div>
@Html.Partial("_LoginModal",Model)
@Html.Partial("_GoogleAnalyticTracker")

</body>
</html>

索引.cshtml:

@model OgrenciEvi.Models.ViewModel

@{
Layout = "~/Views/Shared/_Layout.cshtml";
ViewBag.Title = "Ana Sayfa";
}

@Html.Partial("LandingSection/SearchSection", Model)

_ViewStart.cshtml:

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

Path Image

最佳答案

_Layout.cshtml(更准确地说,任何包含 @RenderBody() 方法的 .cshtml 文件)由 MVC 框架处理作为母版页(也称为布局 View )- 这是用作呈现其他页面的模板的页面。因此不能直接请求。

引用布局 View 的正确方法是在将使用它的任何 View 中设置布局属性。例如:假设您有一个名为 Index.cshtml 的 View ;在其中,您将放置以下行:

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

但是,如果您希望布局 View 应用于项目中的所有 View ,则需要在文件中添加以上代码片段:~/Views/_ViewStart.cshtml

完成上述所有操作后,您应该修改您的 Controller ,以便没有 View 指向布局页面。这可以通过确保没有操作方法被命名为 _Layout 来完成,或者您在调用 View() 方法时传入感兴趣的 View 的名称行动。

关于c# - _Layout.cshtml不能直接请求,因为调用了 "RenderBody"方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44339852/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com