Я только что получил некоторую ошибку, что я не ожидал увидеть ...Razor View - Неприятности с раздела
Чтобы быть ясно, я покажу рабочий код и код ошибки:
Это работая
_MainLayout.cshtml
<div id="content">
<h1>@Page.Title</h1>
@RenderSection("left", false)
@RenderBody()
</div>
Page.cshtml
@section left{
<p>Some text on left side</p>
}
<div>
Some content
</div>
В этом случае все работает нормально, но когда я удалил @RenderSection("left", false)
внутри _MainLayout.cshtml
, я получаю исключение! В каком случае он мне нужен? Смотрите пример ниже:
Это не работает
_MainLayout.cshtml
@if (WebSecurity.IsAuthenticated) {
<h1>@Page.Title</h1>
@RenderSection("left", false)
@RenderBody()
} else {
<h1>You not logged in!</h1>
<p>To see this page, you have to login first.</p>
}
Page.cshtml
@section left{
<p>Some text on left side</p>
}
<div>
Some content
</div>
В этом случае, если пользователь не прошел проверку подлинности, у меня есть это исключение :
Описание:An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Сведения об исключении:System.Web.HttpException: Следующие разделы были определены, но не были обработаны для страницы макета "~/_MainLayout.cshtml": "left".
Что можно перевести как:Section was created but wasn't rendered for layout page "~/_MainLayout.cshtml": "left".
Источник ошибки:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Трассировка стека:
[HttpException (0x80004005): Следующие разделы были определены, но не были обработаны для страницы макета "~/_MainLayout.cshtml": "left".]
System.Web.WebPages.WebPageBase.VerifyRenderedBodyOrSections() +91298
System.Web.WebPages.WebPageBase.PopContext() +332
System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +95
System.Web.WebPages.<>c__DisplayClass7.<RenderPageCore>b__6(TextWriter writer) +102
System.Web.WebPages.HelperResult.WriteTo(TextWriter writer) +12
System.Web.WebPages.WebPageBase.Write(HelperResult result) +67
System.Web.WebPages.WebPageBase.RenderSurrounding(String partialViewName, Action`1 body) +66
System.Web.WebPages.WebPageBase.PopContext() +262
System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +95
System.Web.WebPages.WebPageHttpHandler.ProcessRequestInternal(HttpContext context) +249
Вопрос в следующем: как я могу заставить его работать? Любые советы ценны!
Это смешно, но я не использую MVC. (Я просто играю с WebMatrix и пытаюсь реализовать часть своей идеи). Почему обработка безопасности на каждой странице выглядит глупо ... Но я попытаюсь сделать перенаправление на страницу с ошибкой. Может быть, это сработает. Спасибо, что напомнили мне об этом;) – RAMe0
Ну конечно, я должен был подняться в классе WebSecurity. У меня нет большого опыта работы с WebMatrix, но я предполагаю, что Razor ведет себя аналогичным образом. Возможно, вы пытаетесь сделать что-то, что выходит за рамки WebMatrix? –
Да, знаю. Я понял, что WebMatrix не подходит мне, как я ожидал. Но все же у него есть очень полезные вещи. Теперь я использую 'Context.RedirectLocal', который перенаправляет пользователя на страницу с ошибкой, когда он не вошел в систему. Это отлично работает для меня. – RAMe0