#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. Удалив это, модель будет привязана правильно.