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 に答える