Присвоение значений директиве @model

110
28 ноября 2020, 22:10

Почему я не могу присвоить значение объявленной директиве @model напрямую без использования хелперов, вот так

@model site.Models.PageNews
Controllers.NewsController dataControllerNews = new Controllers.NewsController(); 
Model.MenuNews = dataControllerNews.OneUpdateMenuNews(new Models.MenuPanelNews());

выдает ошибку

System.Web.Mvc.WebViewPage.Model.get returned null.

Или как то все таки можно.

Answer 1

Вы пытаетесь присвоить значение свойству объекта модели, который ещё не инициализирован. Естественно получаете исключение.

По хорошему, значение для Model должно присваиваться в контроллере на сервере. После чего страница рендерится и отправляется в браузер.

То, что делаете Вы (создание контроллера и получение модели в представлении), как минимум нарушает принцип MVC. Каждый компонент этого паттерна должен заниматься своим делом.

Answer 2

А зачем вам проводить все эти операции прямо в модели?

Решение 1: Заполнить это свойство прямо в контроллере на этапе формирования модели.

Решение 2: Передавать объект в ViewBag или ViewData. И использовать его на странице

var menuNews = ViewBag.MenuNews as MenuPanelNews;
var menuNews = ViewData["MenuNews"] as MenuPanelNews;

Решение 3: Напишите метод, но не в контроллере, а в пространстве Helpers, учитесь разделять логику.

@model site.Models.PageNews
@{
   var menuNews = site.Helpers.Class1.OneUpdateMenuNews(new Models.MenuPanelNews());
}

Где Class1

namespace site.Helpers
{
   public static class Class1
   {
      public static MenuNews OneUpdateMenuNews(MenuPanelNews menuPanelNews)
      {
         //TODO
      }
   }
}
READ ALSO
Не работают breakpoint в wcf

Не работают breakpoint в wcf

Ставлю brekpoint в файле wcf-сервиса, после запуска отладки вылезает "no symbols have been loaded"Тот же проект на другом компьютере нормально отрабатывает...

84
c# json сериализованный

c# json сериализованный

В теле запроса имеется сериализованные json данные, как в asp core 2 описывается метод пост, чтобы эти данные вытянуть, нужно ли [FromBody] ?

116
Как сделать загрузку элементов формы (windows forms) без задержки?

Как сделать загрузку элементов формы (windows forms) без задержки?

У меня есть программа написанная на windows forms , которая при запуске грузит данные из *txt файла (объем файла постепенно увеличивается) и отображает...

111