![](/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.