1

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

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,所以我希望这是自动的,而不是我必须在控制器中指定控制器名称和操作名称。

4

1 回答 1

0

简而言之:不要那样做。在 MVC 模式中,这不是正确的做法。您的视图模型应该尽可能地愚蠢,并且没有任何“上下文”。如果您在视图模型中需要一些“元”数据,例如取决于路由数据(动作、控制器),请编写一个自定义过滤器,将其放在 OnActionExecuted 中 - 例如,如果当前视图模型具有您的“ meta” 属性(由此您可以制定自己的约定)并从路由数据中填充它们。

于 2011-11-28T14:17:19.563 回答