Asp.Net Core Razor 页面中的“ModelState.AddModelError”显示不正确的错误消息

Posted

技术标签:

【中文标题】Asp.Net Core Razor 页面中的“ModelState.AddModelError”显示不正确的错误消息【英文标题】:Incorrect error message is displayed by "ModelState.AddModelError" in Asp.Net Core Razore Pages 【发布时间】:2021-11-29 03:35:37 【问题描述】:

在下面我的OnPost 方法中,我检查字段CoursePrice 是否为数字:

public IActionResult OnPost(IFormFile imgCourseUp, IFormFile demoFileName) 
    float num;
    if (!float.TryParse(Course.CoursePrice.ToString(), out num))
    
        ModelState.AddModelError("", "Put a Valid Number..");
        return Page();
    

当我输入无效数字时,例如:“123kk”,一切都出错了。我的意思是 float.TryParse(Course.CoursePrice.ToString(), out num) 方法可以正常工作,我的代码没有任何问题。但是当我运行项目并输入无效号码时,错误消息会是别的东西!例如在这部分ModelState.AddModelError("", "Put a Valid Number.."),我说错误消息必须是Put a Valid Number..,但它向我显示了这个错误:值'123l'对于قیمت无效??

那么有人有什么想法吗?

这是我的 View Razore:

<div class="form-group">
   <label>قیمت دوره </label>
   <input class="form-control" type="text" asp-for="@Model.Course.CoursePrice" value="0" />
   <p class="help-block">لطفا فقط عدد وارد کنید</p>
 </div>

 <div class="form-group">
     <div asp-validation-summary="All"></div>
 </div>

【问题讨论】:

您是否正在并行运行另一个验证框架?例如。是否为该属性设置了数据注释,或者您使用的是 fluentvalidation? 【参考方案1】:

ModelState.AddModelError 的第一个参数应该是你的模型属性的名称,所以它知道错误发生在哪个属性中。

尝试将行 ModelState.AddModelError("", "Put a Valid Number.."); 更改为 ModelState.AddModelError(nameof(Course.CoursePrice), "Put a Valid Number..");

完整代码:

public IActionResult OnPost(IFormFile imgCourseUp, IFormFile demoFileName) 
    float num;
    if (!float.TryParse(Course.CoursePrice.ToString(), out num))
    
        ModelState.AddModelError(nameof(Course.CoursePrice), "Put a Valid Number..");
        return Page();
    

【讨论】:

我完全知道你在说什么。你之前说的方法我试过了,没有任何影响! 也许它将新错误附加到现有错误列表中。如果您调用 ModelState["CoursePrice"].Errors.Clear(); 会发生什么在调用 ModelState.AddModelError 之前? 我刚刚尝试了 ModelState["CoursePrice"].Errors.Clear(),但再次向我显示了同样的错误! :)

以上是关于Asp.Net Core Razor 页面中的“ModelState.AddModelError”显示不正确的错误消息的主要内容,如果未能解决你的问题,请参考以下文章

Asp.Net Core Razor 页面中的远程验证

Asp.net Core Razor 页面中的引导警报

更改 ASP.NET Core Razor 页面中的默认登录页面?

将 ASP.NET Core Razor 页面中的默认页面更改为登录页面

如何使用 ASP.NET Core Razor 页面预选下拉列表中的项目

ASP.NET Core 2.2 Razor 页面中的自定义路由