簡體   English   中英

將模型傳遞給MVC6中的新ViewDataDictionary的最佳方法

[英]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屬性。

您只需要獲得一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM