将模型传递给 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
,然后指定其模型 属性。
- 新框架就是这样做的,
ViewDataDictionaryControllerPropertyActivator
creates the ViewData. The model model property is set when you use one of the helper methods in the Controller like View
,如 return View(model)
您只需要获得一个 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());
...
}
我正在尝试将我当前的 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
,然后指定其模型 属性。
- 新框架就是这样做的,
ViewDataDictionaryControllerPropertyActivator
creates the ViewData. The model model property is set when you use one of the helper methods in the Controller likeView
,如return View(model)
您只需要获得一个 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());
...
}