Почему я не могу присвоить значение объявленной директиве @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.
Или как то все таки можно.
Вы пытаетесь присвоить значение свойству объекта модели, который ещё не инициализирован. Естественно получаете исключение.
По хорошему, значение для Model должно присваиваться в контроллере на сервере. После чего страница рендерится и отправляется в браузер.
То, что делаете Вы (создание контроллера и получение модели в представлении), как минимум нарушает принцип MVC. Каждый компонент этого паттерна должен заниматься своим делом.
А зачем вам проводить все эти операции прямо в модели?
Решение 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
}
}
}
Продвижение своими сайтами как стратегия роста и независимости