![](/img/trans.png)
[英]Entity Framework ASP.NET MVC6 in Identity Model, Creating a new record instead of linking it to existing record
[英]Best way to pass a model to a new ViewDataDictionary in MVC6
我正在尝试将我当前的MVC5项目迁移到MVC6,但是在主要使用ViewDataDictionary
的新命名空间/方法方面遇到了一些小麻烦。 在MVC5中,你可以轻松地通过传递你的模型来启动一个new ViewDataDictionary
......
PartialViewResult pv = new PartialViewResult();
pv.ViewData = new ViewDataDictionary(model);
...但是在没有实际拥有ViewDataDictionary对象的情况下,MVC6似乎没有任何重载。
所以我想我的问题是,从头开始创建一个新的ViewDataDictionary的最佳方法是什么? 我可以看到以下重载但我无法找到有关如何使用它的任何示例。
public ViewDataDictionary(IModelMetadataProvider metadataProvider, ModelStateDictionary modelState);
您可以创建一个新的ViewDataDictionary
,然后分配其model属性。
ViewDataDictionaryControllerPropertyActivator
创建ViewData。 当您使用Controller中的一个辅助方法(如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());
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.