Я новичок в MVC, так что прошу прощения, если мои вопросы натолкнутся на такие глупости.Вложенные макеты MVC5
У меня есть основной файл макета (_MainLayout.cshtml) и дополнительный файл макета (_AdminLayout.cshtml). Оба этих файла находятся в папке/Views/Shared.
_MainLayout.cshtml выглядит следующим образом:
<!DOCTYPE html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="shortcut icon" type="image/x-icon" href="~/icons/favicon.ico" />
<title>U - @ViewData["Title"]</title>
<link rel="stylesheet" href="~/Content/Site.css"/>
</head>
<body>
<nav>
<div id="MainMenu" style="top:45px; height:40px; width:100%; position:fixed">
<ul style="list-style-type:none; text-align:center">
<li class="u-li-rightfloatinglink">@Html.ActionLink("Admin", "_AdminLayout", "Admin")</li>
<li class="u-li-rightfloatinglink">@Html.ActionLink("Contact", "Contact", "Home")</li>
<li class="u-li-rightfloatinglink">@Html.ActionLink("About", "About", "Home")</li>
<li class="u-li-rightfloatinglink">@Html.ActionLink("Home", "Index", "Home")</li>
</ul>
</div>
</nav>
<div id="MainBody" style="top: 80px; width:100%; text-align:center; position:fixed">
@RenderBody()
</div>
<div id="MainFooter" style="position:fixed; bottom:0px; width:100%; height:20px; background:#015da0">
<p style="display:table-cell; color:#ffffff; text-align:center; vertical-align: middle">© @DateTime.Now.Year - U</p>
</div>
@RenderSection("scripts", required: false)
</body>
_AdminLayout.cshtml выглядит следующим образом:
@{
ViewBag.Title = "_AdminLayout";
Layout = "~/Views/Shared/_MainLayout.cshtml";
}
<h2>_AdminLayout</h2>
<div>
@RenderBody()
</div>
ManageTableContent.cshtml снова должен отображаться в разделе @RenderBody в _AdminLayout .cshtml.
ManageTableContent.cshtml выглядит следующим образом:
@{
Layout = "~/Views/Shared/_AdminLayout.cshtml";
ViewBag.Title = "Manage Table Content";
}
<body>
<div class="u-div-header">
<p class="u-p-header">Manage Table Content</p>
</div>
<br />
<div style="width: 100%">
<table class="u-table-layouttable">
<tr>
<td class="u-td-description">Table Name here</td>
<td class="u-td-buttons">
<button class="u-button-addrecord" title="Add Record">
<img />
</button>
<button class="u-button-deleterecord" title="Delete Record">
<img />
</button>
<button class="u-button-clonerecord" title="Clone Record">
<img />
</button>
</tr>
<tr>
<td colspan="2">
<table id="ManagedTable" class="u-table-datatable">
<tr class="u-tr-datatable">
<td></td>
</tr>
</table>
</td>
</tr>
</table>
<table style="width: 100%">
<tr>
<td>
<input id="Submit" type="submit" value="Submit" style="float: right" />
<input id="Cancel" type="reset" value="Cancel" style="float: right" />
</td>
</tr>
</table>
</div>
</body>
По какой-то причине, если я получаю эту ошибку, когда я пытаюсь открыть мой _AdminLayout.cshtml, выбрав ссылку администратора из моего _MainLayout.cshtml:
Additional information: The file "~/Views/Shared/_AdminLayout.cshtml" cannot be requested directly because it calls the "RenderBody" method.
Controller Код:
namespace U.Controllers
{
public class AdminController : Controller
{
// GET: Admin
public ActionResult ManageTableContent()
{
return View();
}
public ActionResult _AdminLayout()
{
ViewBag.Message = "Your admin page.";
return View();
}
}
}
Если удалить @RenderBody()
из моего кода, тогда _AdminLayout.cshtml загружается отлично. Мне нужен @RenderBody()
в моем _AdminLayout.cshtml, потому что здесь я снова покажу частичные представления.
Любая помощь будет оценена по достоинству.
Я получаю эту ошибку, когда я пытаюсь открыть свой _AdminLayout.cshtml из моего _MainLayout.cshtml - проясните более четко –
На моем _MainLayout.cshtml У меня есть несколько ссылок. Одна из ссылок, в свою очередь, вызовет/откроет/отобразит _AdminLayout.cshtml в разделе @RenderBody() в _MainLayout.cshtml. –
Я действительно не понимаю. Я не знаю, в чем проблема обмена кодом с нами. Из вашего высказывания вы вызываете _MainLayout из _Adminlayout и _AdminLayout из _MainLayout. Это своего рода рекурсивный. Если вы любезно поделитесь своим кодом, то, возможно, люди могут вам помочь. –