Модель представления .Net Core 5 в cshtml всегда равна нулю

#asp.net-core #.net-core #asp.net-core-5.0 #asp.net-core-viewcomponent

Вопрос:

Я работаю над некоторым компонентом представления, но когда я пытаюсь получить доступ к модели в файле cshtml, она всегда пуста.

Вот очень простой пример, в котором есть эта проблема, это код .cs

 [ViewComponent(Name = "CssHelper")] public class CssHelperViewComponent : ViewComponent {  public CssHelperViewComponent()  {  }   private bool IsDarkMode;   public async Tasklt;IViewComponentResultgt; InvokeAsync()  {  IsDarkMode = false;  if (HttpContext.Session.TryGetValue("darkmode", out var darkmode))  IsDarkMode = true;  return View(IsDarkMode);  } }  

и это cshtml

 @page @model bool @if (Model) {  lt;link href="assets/css/style.dark.bundle.css" rel="stylesheet" /gt;  lt;link href="assets/plugins/global/plugins.dark.bundle.css" rel="stylesheet" /gt; } @if (!Model) {  lt;link href="assets/css/style.bundle.css" rel="stylesheet" /gt;  lt;link href="assets/plugins/global/plugins.bundle.css" rel="stylesheet" /gt; }   

Я получаю

Исключение NullReferenceException: Ссылка на объект не установлена на экземпляр объекта. Корневое пространство имен.Страницы.Компоненты.CssHelper.Pages_Components_CssHelper_Default.get_Model()

на @if (Модель.Значение)

Что я делаю не так? У меня эта проблема с несколькими компонентами представления, поэтому, возможно, я повторяю одну и ту же ошибку во всех элементах.

Комментарии:

1. Не могли бы вы отредактировать свой вопрос и добавить свою модель «ExtBool»?

2. Я упростил код, не используя свой пользовательский тип. Результат тот же, используя bool в качестве возвращаемого типа

Ответ №1:

Проблема заключалась в директиве

 @page  

в файле cshtml. Удалив это, модель будет привязана правильно.