编程语言
首页 > 编程语言> > c#-将模型传递给MVC6中新的ViewDataDictionary的最佳方法

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

作者:互联网

我正在尝试将当前的MVC5项目迁移到MVC6,但是主要是通过ViewDataDictionary在新名称空间/方法上遇到了一些小麻烦.在MVC5中,您可以像这样传递模型轻松地启动新的ViewDataDictionary …

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

…但是在MVC6中,如果没有实际可用的ViewDataDictionary对象,似乎没有任何重载.

所以我想我的问题是,从头开始创建新的ViewDataDictionary的最佳方法是什么?我可以看到以下重载,但是找不到如何使用它的任何示例.

public ViewDataDictionary(IModelMetadataProvider metadataProvider, ModelStateDictionary modelState);

解决方法:

您可以创建一个新的ViewDataDictionary,然后分配其模型属性.

>新框架完成了,ViewDataDictionaryControllerPropertyActivator创建了ViewData.当您在控制器中使用诸如View之类的辅助方法之一时,将设置模型模型属性,如返回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());

    ...

}

标签:asp-net-core-mvc,c
来源: https://codeday.me/bug/20191027/1947035.html