繁体   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