在我的控制器中,我有以下代码:
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很多动作共同所以我希望这是自动的,而不是我必须在控制器中指定控制器名称和动作名称。
答案 0 :(得分:0)
简而言之:不要那样做。在MVC模式中做正确的事情是不对的。你的视图模型应尽可能愚蠢,没有任何“上下文”。如果您在视图模型中需要一些“元”数据,例如根据路径数据(操作,控制器),编写一个自定义过滤器,它将把它放在OnActionExecuted中 - 例如,如果当前视图模型具有您的“元“属性(由此你制定自己的约定)并从路径数据中填充它们。