MVC .Net核心模型验证 - 值''无效.错误

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两个RequiredDataType标签,如图上面.

我的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


Ham*_*med 8

.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)

您可以在此处阅读更多相关信息。


Oza*_*RAM 7

遇到同样的问题,但无法发现问题。我在调试模式下检查了对象,看看是否有任何方法可以查看哪个属性未达到模型状态。

modelstate 对象的调试模式视图

然后我会看到哪个模型失败了。这是一个映射到复选框的布尔值

奇怪的是“这不是必填字段”!

我添加了一个问号以使其可为空,并在使用它时使用了 GetValueOrDefault 方法

public bool? IsCorporateAccount { get; set; }
Run Code Online (Sandbox Code Playgroud)

  • 完美的!谢谢。:) (2认同)