MVC6,如果用户提交的decimal/int值为空,则服务器端模型验证显示错误消息

本文关键字:服务器端 模型 显示 消息 错误 验证 提交 用户 如果 decimal int | 更新日期: 2023-09-27 18:02:52

MVC6,在模型验证服务器端发现问题。

public string Genre { get; set; }
public decimal Price { get; set; }

如果用户提交的decimal/int值为空,则服务器端模型验证显示错误消息,即值"无效。

我已经签入了控制器,传入的模型显示价格值0作为默认值,但ModelState得到rawValue="。所以与数据类型冲突并抛出消息。

模型默认携带0(即使用户提交时为空(,所以应该使用0而不是"(string.empty(进行验证。

前端javascript验证工作正常,但服务器端模型验证显示错误的错误消息因为"值"无效">

decimal/int总是将0作为默认值。

有什么解决方案吗?

MVC6,如果用户提交的decimal/int值为空,则服务器端模型验证显示错误消息

您可以在控制器中添加一个验证区域,并自己进行验证。

if (model.Price == 0)
   ModelState.AddModelError("", "please enter the price .");
   return View();

或者,如果ModelState.IsValid((为false,则可以告诉模型状态以阻止验证decimal/int字段。在ModelState.IsValid((之前添加此代码

ModelState.Remove("Price");

然后把值0加到你自己身上
或者,如果价格是必填字段,您可以添加数据注释属性来添加自定义验证错误:

[System.ComponentModel.DataAnnotations.Required(ErrorMessage = "Please enter thye price .")]
public decimal price {get;set;}

我在ASP Core项目中遇到了类似的问题。通过使用Range属性和带有错误消息的Required为整数设置了模型验证。但当用户将input控件设为空时,我会收到类似的错误消息

"值"无效。">

模型中的值为0,但原始值为空。我必须编辑我的模型以获得可为null的属性并使用属性。我得到了我想要的结果。

[Range(1, int.MaxValue,ErrorMessage = "My message1")]
[Required (ErrorMessage = "My message2")]
public int? PreparationTimeMinutes { get; set; } 

我希望有人能帮忙。