Страницы удостоверений Asp.Net Core 2.2 не будут работать с Layout в папке View / Shared - PullRequest
0 голосов
/ 15 января 2019

Я только начал работать над функциями регистрации / входа в систему / выхода из системы нового веб-приложения с использованием Asp.Net Core 2.2.

Я удалил страницы Identity, просто для меня.Я не фанат этой новой методологии.

Код моей страницы генерирует ссылку для страницы регистрации, как, например,

<div class="text-right reg-button">
    <a asp-area="Identity" asp-page="/Account/Register" class="submit">Register</a>
</div>

, это создает ссылку

<div class="text-right reg-button">
    <a class="submit" href="/Identity/Account/Register">Register</a>
</div>

нажатие на эту ссылку приводит к ошибке

NullReferenceException: ссылка на объект не установлена ​​для экземпляра объекта.

Ссылка выглядела правильно, поэтому я подозревал, что что-то не такс макетом, который он пытается использовать, поскольку это также является частью детализации ошибки.

NullReferenceException: ссылка на объект не установлена ​​на экземпляр объекта.AspNetCore.Views_Shared__Layout_Industry.b__14_0 () в _Layout-Industry.cshtml + var controllerName = this.ViewContext.RouteData.Values ​​["controller"]. ToString ();

, поэтому я устанавливаю макет равным нулюнепосредственно на странице регистрации и на странице, отображаемой в ее основной форме.

Таким образом, вопрос становится двойным;

  1. Почему макет, который я установил в Identity?Файл ViewStart разделов (макет, который я также установил в папке Views / Shared) не работает со всеми страницами удостоверений, но отлично работает на любой другой странице, кроме папки Areas?

  2. Даже если я установлю полный путь к макету прямо в файле, он все равно завершится с той же ошибкой.Имя файла макетов - _Layout-Industry, но я заметил, что в деталях ошибки он отображается как _Layout_Industry. Этот дефис вызывает проблему?

    Вот сайт, который был впервые открыт

Site Main Page

Если вы нажмете кнопку «Регистрация / ссылка» в правом верхнем углу, откроется страница регистрации, но она не будет работать

Регистрацияpage - это страница регистрации по умолчанию, которая входит в веб-приложение по умолчанию, страница Layout - моя собственная, и она работает на всех 14 других страницах, которые НЕ находятся в области Identity, и находятся в стандартных подпапках Views

Page load enter image description here

ОБНОВЛЕНИЕ:

У меня есть компонент вида, который загружает раздел метатега встраница.Вот код

@{
    var controllerName = this.ViewContext.RouteData.Values["controller"]?.ToString();
    var actionName = this.ViewContext.RouteData.Values["action"]?.ToString();
    var userid = UserManager.GetUserId(User);
}
<!--Meta Tags- Using MetatagViewComponent-->
@if (controllerName != null && actionName != null)
{
    @await Component.InvokeAsync("Metatag", new MetatagViewComponent.MetatagRequest { Controller = controllerName, Action = actionName })
}

Не удалось выполнить вызовы контроллера и действия, поскольку на страницах удостоверений нет контроллеров.Я сделал их обнуляемыми и обходил их, и теперь страница регистрации загружается.Есть ли способ получить имя представления со страниц идентификации, затем я могу получить метатеги, как и для всех других страниц.

1 Ответ

0 голосов
/ 15 января 2019

Используется ваш макет. Проблема в том, что ваш макет буквально вызывает исключение. Теперь причина, по которой он генерирует исключение при использовании Razor Page по сравнению с традиционным представлением MVC, заключается в том, что в Razor Pages отсутствует контроллер, и поэтому ViewContext.RouteData.Values["controller"] равно нулю. Попытка отозвать ToString(), что приводит к вашему NullReferenceException.

При использовании Razor Pages ни «action», ни «controller» не будут присутствовать в ваших RouteData, поскольку ни одна из этих концепций не применима. Вместо этого у вас будут «страница» и «обработчик». Если вы хотите использовать один и тот же макет как с Razor Pages, так и с представлениями MVC, то вам необходимо настроить логику, связанную с тем, что вы делаете, с именем контроллера, чтобы приспособить и Razor Pages.

...