Как сделать ViewContext доступным в моей viewModel? - PullRequest
1 голос
/ 24 ноября 2011

В моем контроллере у меня есть следующий код:

var viewModel = new ListCityViewModel {
                City = rowData,
                Meta =
                {
                    DataSourceID = dataSourceID,
                    Em0 = em0
                }
            };

В моей viewModel у меня есть следующее:

public class ListCityViewModel : BaseViewModel
{
    public ListCitiesViewModel()
    {
        Meta = new Meta
        {
            Title = ViewContext.Controller.ValueProvider.GetValue("controller").RawValue +
                    ViewContext.Controller.ValueProvider.GetValue("action").RawValue,
            Desc = ViewContext.Controller.ValueProvider.GetValue("controller").RawValue +
                    ViewContext.Controller.ValueProvider.GetValue("action").RawValue
        };
    }
    public ICollection<City> Cities { get; set; } 
}

и:

public class BaseViewModel
{
    public BaseViewModel()
    {
    }
    public Meta Meta { get; set; }
}

Однакоэто не работает, когда я получаю сообщение:

Error   6   An object reference is required for the non-static field, 
method, or property 'System.Web.Mvc.ControllerContext.Controller.get'

Может кто-нибудь помочь мне с этим.Нужно ли что-то передать viewModel из контроллера и как я могу передать это.У меня есть эта viewModel, общая для многих действий, поэтому я хотел бы, чтобы она была автоматической, а не указывать в контроллере имя контроллера и имя действия.

1 Ответ

0 голосов
/ 28 ноября 2011

Короче: не делай этого.Это не правильно делать в шаблоне MVC.Ваши view-модели должны быть настолько глупыми, насколько это возможно, и без каких-либо «контекстов».Если вам нужны некоторые «мета-данные» в ваших моделях представления, в зависимости, например, от данных маршрута (action, controller), напишите собственный фильтр, который поместит его туда в OnActionExecuted - например, посмотрите по отражению, если текущая модель представления имеет ваш «мета-свойства (этим вы сами создаете соглашение) и заполняете их из данных маршрута.

...