MVC6,在模型验证服务器端发现问题。
public string Genre { get; set; }
public decimal Price { get; set; }
如果用户提交的decimal/int值为空,则服务器端模型验证显示错误消息,即值"无效。
我已经签入了控制器,传入的模型显示价格值0作为默认值,但ModelState得到rawValue="。所以与数据类型冲突并抛出消息。
模型默认携带0(即使用户提交时为空(,所以应该使用0而不是"(string.empty(进行验证。
前端javascript验证工作正常,但服务器端模型验证显示错误的错误消息因为"值"无效">
decimal/int总是将0作为默认值。
有什么解决方案吗?
您可以在控制器中添加一个验证区域,并自己进行验证。
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; }
我希望有人能帮忙。