TTC*_*TCG 20 c# asp.net-mvc model-validation asp.net-core-mvc
我试图在MVC .Net Core中使用模型验证,并且无法管理替换此默认错误消息'值''无效'.
理论上,我们可以通过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; }
Run Code Online (Sandbox Code Playgroud)
我把不同的ErrorMessage两个Required和DataType标签,如图上面.
我的HTML视图
<div class="col-md-2">
<input class="form-control" asp-for="AppointmentDate">
<span asp-validation-for="AppointmentDate" class="text-danger"></span>
</div>
Run Code Online (Sandbox Code Playgroud)
你能帮我解决一下如何取代错误信息吗?谢谢.
Den*_*kov 22
为了使您的Required属性有效,您需要使字段可以为空:
public DateTime? AppointmentDate { get; set; }
Run Code Online (Sandbox Code Playgroud)
编辑:还要注意,该DataType属性实际上不对字段执行验证.MVC验证从post数据应用绑定时的日期model
.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.");
});
Run Code Online (Sandbox Code Playgroud)
您可以在此处阅读更多相关信息。
遇到同样的问题,但无法发现问题。我在调试模式下检查了对象,看看是否有任何方法可以查看哪个属性未达到模型状态。
然后我会看到哪个模型失败了。这是一个映射到复选框的布尔值
奇怪的是“这不是必填字段”!
我添加了一个问号以使其可为空,并在使用它时使用了 GetValueOrDefault 方法
public bool? IsCorporateAccount { get; set; }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11534 次 |
| 最近记录: |