将模型传递给 MVC6 中的新 ViewDataDictionary 的最佳方法

Best way to pass a model to a new ViewDataDictionary in MVC6

我正在尝试将我当前的 MVC5 项目迁移到 MVC6,但在新 namespaces/methods 方面遇到了一个小障碍,主要是 ViewDataDictionary。在 MVC5 中,您可以通过像这样传递模型来轻松启动 new ViewDataDictionary...

PartialViewResult pv = new PartialViewResult();
pv.ViewData = new ViewDataDictionary(model);

...但是在没有实际可用的 ViewDataDictionary 对象的情况下,在 MVC6 中似乎没有任何重载。

所以我想我的问题是,从头开始创建新 ViewDataDictionary 的最佳方法是什么?我可以看到以下重载,但找不到任何有关如何使用它的示例。

public ViewDataDictionary(IModelMetadataProvider metadataProvider, ModelStateDictionary modelState);

您可以创建一个新的 ViewDataDictionary,然后指定其模型 属性。

您只需要获得一个 IModelMetadataProvider,您可以在控制器中使用 DI 或通过 HttpContext.ApplicationServices 服务定位器获得它。

public IActionResult SomeAction()
{
    var modelMetadataProvider = this.Context.ApplicationServices.GetRequiredService<IModelMetadataProvider>();
    var viewDataDictionary = new ViewDataDictionary<FooModel>(modelMetadataProvider, new ModelStateDictionary());
    viewDataDictionary.Model = new FooModel();

    ...        

}

也许你可以提供一个扩展方法:

public static ViewDataDictionary<T> CreateViewDataDictionary<T>(this HttpContext httpContext, T model)
{
    var modelMetadataProvider = httpContext.ApplicationServices.GetRequiredService<IModelMetadataProvider>();
    return new ViewDataDictionary<T>(modelMetadataProvider, new ModelStateDictionary())
    {
        Model = model
    };
}

public IActionResult SomeAction()
{
    var viewDataDictionary = this.Context.CreateViewDataDictionary(new FooModel());

    ...

}