Ниже приведен точный сценарий в моем приложении ASP.NET MVC:
Есть две страницы макета, которые совершенно идентичны друг другу. Но у одного есть атрибуты, связанные с angular, в теге "", тогда как другой - неугловой макет. Чтобы избежать дублирования разметки в обоих файлах макета бритвы, я решил создать частичное представление и поделиться им на всех страницах макета.
Ниже приведен частичный вид (бритва), я назвал его «_LayoutPartial»:
_LayoutPartial.cshtml
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
@Html.ActionLink("Application name", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" })
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li>@Html.ActionLink("Home", "Index", "Home")</li>
<li>@Html.ActionLink("About", "About", "Home")</li>
<li>@Html.ActionLink("Contact", "Contact", "Home")</li>
</ul>
@Html.Partial("_LoginPartial")
</div>
</div>
</div>
<div class="container body-content">
@RenderBody()
<hr />
<footer>
<p>© @DateTime.Now.Year - My ASP.NET Application</p>
</footer>
</div>
Приведенное выше частичное представление используется в файлах «_Layout.cshtml» и «_AngularLayout.cshtml», как показано ниже:
_Layout.cshtml
<body>
@Html.Partial("_LayoutPartial")
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bootstrap")
@RenderSection("scripts", required: false)
</body>
_AngularLayout.cshtml
<body ng-app="myAngularLab">
@Html.Partial("_LayoutPartial")
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bootstrap")
@RenderSection("scripts", required: false)
</body>
Когда я пытаюсь запустить приложение MVC, я получаю следующую ошибку:
Файл "~/Views/Shared/_LayoutPartial.cshtml" нельзя запросить напрямую, так как он вызывает метод "RenderBody".
Сообщение об ошибке очень очевидно, и кажется, что мы можем использовать метод RenderBody только на мастер-странице и больше нигде. Но мне интересно знать, как мы можем иметь две идентичные страницы макета (с небольшими различиями, как показано в примере), написав общий код вместо того, чтобы хранить дублирующийся код на обеих страницах макета?
<div class="container body-content"> @RenderBody() <hr /> <footer> <p>© @DateTime.Now.Year - My ASP.NET Application</p> </footer> </div>
ИЗ общего файла и поместить его отдельно в файл Angular и _Layout? - person Unbreakable   schedule 26.07.2017@Scripts
и@Styles
в дочерних макетах. В этом случаеng-app="myAngularLab"
помещается наdiv
вместоbody
. - person Tetsuya Yamamoto   schedule 26.07.2017