Ant*_*att 3 c# asp.net-core-mvc
我正在尝试将当前的 MVC5 项目迁移到 MVC6,但在新的命名空间/方法(主要是ViewDataDictionary. new ViewDataDictionary在 MVC5 中,您可以通过像这样传递模型来轻松启动...
PartialViewResult pv = new PartialViewResult();
pv.ViewData = new ViewDataDictionary(model);
Run Code Online (Sandbox Code Playgroud)
...但在 MVC6 中似乎没有任何重载,而实际上没有可用的 ViewDataDictionary 对象。
所以我想我的问题是,从头开始创建新 ViewDataDictionary 的最佳方法是什么?我可以看到以下重载,但我找不到任何有关如何使用它的示例。
public ViewDataDictionary(IModelMetadataProvider metadataProvider, ModelStateDictionary modelState);
Run Code Online (Sandbox Code Playgroud)
您可以创建一个新的模型ViewDataDictionary,然后分配其模型属性。
ViewDataDictionaryControllerPropertyActivator创建了 ViewData。当您使用控制器中的辅助方法之一(例如)时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();
...
}
Run Code Online (Sandbox Code Playgroud)
也许你可以提供一个扩展方法:
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());
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2560 次 |
| 最近记录: |