【问题标题】:AspNetCore ModelState type missing in one specific context一个特定上下文中缺少 AspNetCore ModelState 类型
【发布时间】:2020-03-26 14:53:35
【问题描述】:

我的 Asp Net Core (2.2) 项目中有一个控制器操作。 我已经声明了

    using Microsoft.AspNetCore.Mvc.ModelBinding;

动作代码如下:

    1:   public IActionResult Index()
    2:   {
    3:       var errors = ModelState.Values.SelectMany(v => v.Errors);
    4:       foreach ( ModelState modelState in ViewData.ModelState.Values)
    ...

由于某种原因,编译器用一条消息突出显示第 4 行

错误 CS0246 找不到类型或命名空间名称“ModelState”(您是否缺少 using 指令或程序集引用?) ics-billing C:\Users...\Controllers\HomeController.cs 30 Active

我不明白编译器如何无法解析第 4 行的“ModelState”类型,而在第 3 行引用完全相同的类却没有问题?

【问题讨论】:

  • 你的控制器是否继承:Controller ?

标签: c# asp.net-core


【解决方案1】:

第三行的ModelStateControllerBase 类的一个属性,它是Controller 继承自的。在第四行,它正在寻找一个名为ModelState 的类型,但该类型不存在。 ModelState 属性的类型为 ModelStateDictionaryhttps://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.modelstate?view=aspnetcore-3.0#Microsoft_AspNetCore_Mvc_ControllerBase_ModelState

ModelStateDictionaryValues 属性是ValueEnumerable 类型:https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.modelbinding.modelstatedictionary.values?view=aspnetcore-3.0#Microsoft_AspNetCore_Mvc_ModelBinding_ModelStateDictionary_Values

这是ModelStateEntry 中的IEnumerablehttps://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.modelbinding.modelstatedictionary.valueenumerable?view=aspnetcore-3.0

我相信您需要将第四行的ModelState modelState 更改为ModelStateEntry modelStateEntry。但是,您也可以使用var 而不是指定类型名称。

【讨论】:

  • 真的很感谢这样的信息链接,并认为我是多么愚蠢,甚至没有尝试使用 var 的解决方案。
【解决方案2】:

您可以通过此代码循环查找 ModelState 错误:

            if (!ModelState.IsValid)
            {
                ViewBag.Message = string.Join("; ", ModelState.Values
                                    .SelectMany(x => x.Errors)
                                    .Select(x => x.ErrorMessage));                    
                return View(model);
            }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-09
    • 1970-01-01
    • 2022-11-12
    • 1970-01-01
    • 2021-04-20
    • 2021-07-29
    • 1970-01-01
    • 2019-12-11
    相关资源
    最近更新 更多