简体   繁体   English

将模型传递给MVC6中的新ViewDataDictionary的最佳方法

[英]Best way to pass a model to a new ViewDataDictionary in MVC6

I'm trying to migrate my current MVC5 project over to MVC6 but have hit a minor snag around the new namespaces/methods, primarily with ViewDataDictionary . 我正在尝试将我当前的MVC5项目迁移到MVC6,但是在主要使用ViewDataDictionary的新命名空间/方法方面遇到了一些小麻烦。 In MVC5 you could easily initiate a new ViewDataDictionary by just passing your model like so... 在MVC5中,你可以轻松地通过传递你的模型来启动一个new ViewDataDictionary ......

PartialViewResult pv = new PartialViewResult();
pv.ViewData = new ViewDataDictionary(model);

...but there doesn't seem to be any overloads for this in MVC6 without actually having a ViewDataDictionary object available. ...但是在没有实际拥有ViewDataDictionary对象的情况下,MVC6似乎没有任何重载。

So I suppose my question is, what is the best method to create a new ViewDataDictionary from scratch? 所以我想我的问题是,从头开始创建一个新的ViewDataDictionary的最佳方法是什么? I can see the following overload but I'm unable to find any examples on how to use it. 我可以看到以下重载但我无法找到有关如何使用它的任何示例。

public ViewDataDictionary(IModelMetadataProvider metadataProvider, ModelStateDictionary modelState);

You could create a new ViewDataDictionary and then assign its model property. 您可以创建一个新的ViewDataDictionary ,然后分配其model属性。

You will just need to get an IModelMetadataProvider which you can either get using DI in your controller or via the HttpContext.ApplicationServices service locator. 您只需要获得一个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();

    ...        

}

Maybe you could provide an extension method: 也许你可以提供一个扩展方法:

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