如何在viewModel中使ViewContext可用?

时间:2011-11-24 16:02:46

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-viewmodel

在我的控制器中,我有以下代码:

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 :(得分:0)

简而言之:不要那样做。在MVC模式中做正确的事情是不对的。你的视图模型应尽可能愚蠢,没有任何“上下文”。如果您在视图模型中需要一些“元”数据,例如根据路径数据(操作,控制器),编写一个自定义过滤器,它将把它放在OnActionExecuted中 - 例如,如果当前视图模型具有您的“元“属性(由此你制定自己的约定)并从路径数据中填充它们。