[英]MVC .Net Core Model Validation - The value '' is invalid. Error
我正在尝试在 MVC .Net Core 中使用模型验证,但无法替换此默认错误消息“值”无效”。
理论上,我们可以通过在Model中使用ErrorMessage
Annotation来替换我们自己自定义的错误信息。 但我找不到一种方法来使这个工作。
我的模特
[Required(ErrorMessage = "Date Required")]
[DataType(DataType.Date, ErrorMessage = "Invalid Date Format")]
[Display(Name = "Appointment Date")]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime AppointmentDate { get; set; }
如上所示,我为Required
和DataType
标记设置了不同的ErrorMessage
。
我的 html 视图
<div class="col-md-2">
<input class="form-control" asp-for="AppointmentDate">
<span asp-validation-for="AppointmentDate" class="text-danger"></span>
</div>
你能帮我解决这个错误信息吗? 谢谢。
为了使您的Required
属性起作用,您需要使字段可以为空:
public DateTime? AppointmentDate { get; set; }
编辑:还要注意DataType
属性实际上并不对字段执行验证。 将post
数据绑定到model
时,MVC 验证日期
.NET Core 3 验证系统更改后。 不可为空的参数被视为具有 [Required] 属性。 即使您不应用 [Required] 属性,您也会获得客户端验证。 客户端 JQuery 验证接受空字符串字段,但一旦发送到服务器,相同的字段将获得无效结果。 The value '' is invalid
是服务器端验证的默认错误消息。 根据 asp.net 文档,通过使用 [Required] 属性,您可以覆盖此消息,但它不适用于空字段。 不幸的是,此功能为引用不可为空的 int 属性的隐藏输入字段生成空字符串值 ("")(即@Html.Hiddenfor(m=>m.id)
将为 html 元素生成 ""。) asp.net 文档中提供的选项最安全的是使属性可以为空。 另一个不错的选择是将 .NET 默认消息更改为其他内容
services.AddRazorPages()
.AddMvcOptions(options =>
{
options.ModelBindingMessageProvider.SetValueMustNotBeNullAccessor(
_ => "The field is required.");
});
您可以在此处阅读更多相关信息。
在某些情况下,验证摘要可能是原因:将“全部”更改为“ModelOnly”:
<div asp-validation-summary="All" class="text-danger"></div>
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
我的问题是在创建操作中,我会返回视图而不更新实体,当我更改实体时,即Return View(new MyEntity());
它解决了这个问题
我的具体问题与显示类似消息的选择选项验证有关,而不是来自模型的自定义消息。 除了关于使验证的属性可以为空的答案之外,还要仔细检查 DOM 元素中的实际值。 我的问题是通过添加可空性和一个空字符串作为默认选项中的值来解决的,默认选项应该是一个 int。
<select asp-for="@Model.Thing" asp-items="Model.Things"
<option value="" selected>Please select a Thing</option>
</select>
<span asp-validation-for="@Model.Thing" class="text-danger"></span>
在我的场景中,我的模型的“NeedToPrint”属性出现验证错误。 我必须确保在我的 cshtml 文件中指定了一个 VALUE,如下所示:
<button type="submit" name="NeedToPrint" value="false" class="btn btn-default" >Submit</button>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.