我使用属性进行路由。这是相关的,我不知道。
当我不使用" Route"属性,共享控制器中的_Layaout()动作不起作用,但页面正在渲染。
public class SharedController : Controller
{
// GET: Shared
[AllowAnonymous]
public ActionResult _Layout()
{
return View();
}
}
当我使用" Route"属性它确实有效但我得到以下错误:
public class SharedController : Controller
{
// GET: Shared
[AllowAnonymous]
[Route]
public ActionResult _Layout()
{
return View();
}
}
文件"〜/ Views / Shared / _Layout.cshtml"不能直接要求 因为它调用" RenderBody"方法
也是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>
Index.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";
}
答案 0 :(得分:1)
_Layout.cshtml
(更正确地说,任何包含.cshtml
方法的@RenderBody()
文件)被MVC框架视为母版页(也就是布局视图) - 这是一个使用的页面作为渲染其他页面的模板。因此无法直接请求。
引用布局视图的正确方法是在将使用它的任何视图中设置布局属性。例如:假设您有一个名为Index.cshtml
的视图;在其中,您将放置以下行:
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
如果您希望布局视图应用于项目中的所有视图,则您需要在文件中添加上述代码段:~/Views/_ViewStart.cshtml
完成上述所有操作后,应修改您的控制器,以便没有视图指向布局页面。这可以通过确保没有操作方法命名为_Layout
,或者在操作中调用View()
方法时传递感兴趣视图的名称来完成。