【问题标题】:ASP.NET Data annotations validation - hide low level validations failures?ASP.NET 数据注释验证 - 隐藏低级验证失败?
【发布时间】:2016-12-13 15:15:09
【问题描述】:

我有一个模型,我在其上使用数据注释进行验证,如下所示:

public int Id { get; set; }

[Required(ErrorMessage = "Please enter the Sample Description.")]
public string Description { get; set; }

[Required(ErrorMessage = "Please enter the Start Date.")]
[DataType(DataType.Date)]
public DateTime StartDate { get; set; }

通过 API 插入数据,如果验证失败,我想将返回的任何错误消息直接显示到屏幕上。

这对于这样的事情很好:

[Required(ErrorMessage = "Please enter the Sample Description.")]
public string Description { get; set; }

但是在显示的整数属性“Id”和客户端发送的情况下,一个不能转换为整数的值,例如“x”,那么你会得到一个像这样的低级消息:

"Could not convert string to integer: x. Path 'Id', line 1, position 9.

我真正想要的是更像是一条消息

"Please provide an integer for the Id".

无论如何允许通过注释验证数据并且仍然提供比我得到的更有用的消息?

【问题讨论】:

    标签: asp.net validation data-annotations


    【解决方案1】:

    几个可能的选择:

    (1) 在 MVC 4 中,您可以使用 Html.ValidationMessageFor. 更改视图中的错误消息,就像:

    @Html.ValidationMessageFor(model => model.YourIntField, "Please provide an integer for the Id".)
    

    在模型中:

    [DataType(DataType.Int)] public int YourIntField { get; set; }

    (2) 对于任何数字验证,您必须根据您的要求使用不同的不同范围验证

    整数

    [Range(0, int.MaxValue, ErrorMessage = "Please enter valid integer Number")]
    

    对于浮点数:

    [Range(0, float.MaxValue, ErrorMessage = "Please enter valid float Number")]
    

    参考:Int or Number DataType for DataAnnotation validation attribute

    【讨论】:

    • 感谢您的回复。当我尝试您的第二种方法时,我收到与以前相同的错误消息(““无法将字符串转换为整数:x。路径 'Id',第 1 行,位置 9。”)。我不确定是否第一个选项适用于我。我实际上没有视图 - 只有模型和控制器。控制器响应请求并返回 JSON。如果您可以扩展第一个选项,也许我可以尝试一下?再次感谢。
    • 如果您没有视图,那么您需要在控制器级别检查这一点,因为 DataAnnotations 结果是在视图上呈现的。你可以返回 HttpResponse ...看看stackoverflow.com/questions/12240713/…
    猜你喜欢
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多