【问题标题】:RangeAttribute Data Annotation Not Working as ExpectedRangeAttribute 数据注释未按预期工作
【发布时间】:2010-11-01 01:52:45
【问题描述】:

我正在开发一个 ASP.NET MVC2 应用程序,其中我有一个 User 类,其属性名为 SecurityQuestionID,如下所示:

public class User
{
    [RangeAttribute(1, 5, ErrorMessage = "Security Question is required")]
    [DisplayName("Security Question")]
    public virtual int SecurityQuestionID { get; set; }
}

SecurityQuestionID 字段从视图中的下拉列表中填充,如下所示:

<%: Html.LabelFor(model => model.SecurityQuestionID)%>
<%: Html.DropDownListFor(model => model.SecurityQuestionID, ViewData["securityQuestions"] as SelectList,"Choose a Question",null) %>
<%: Html.ValidationMessageFor(model => model.SecurityQuestionID)%>

控制器使用视图数据向视图发送安全问题,如下所示:

ViewData["securityQuestions"] = new SelectList(_securityQuestionService.GetAll(), "SecurityQuestionID", "Question");

如果我没有从下拉列表中选择问题并点击提交按钮,则会显示“The Security Question field is required.”消息而不是“Security Question is required”。谁能帮我理解我在这里做错了什么?

【问题讨论】:

    标签: c# asp.net-mvc-2 data-annotations


    【解决方案1】:

    如果整数不可为空,则默认为必填。所以范围验证没有失败,但必需的验证失败了。
    您可能希望通过添加必需属性来指定单独的错误消息。

    [Required(ErrorMessage="Security Question is required")]
    

    【讨论】:

      【解决方案2】:

      它可能会抛出该错误,因为它是必填字段。见http://forums.asp.net/p/1391688/2977493.aspx。这与相关字段被定义为int 而不是int? 的事实一致,因此它不能假定null 值。

      换句话说,它没有命中你的范围验证器。

      【讨论】:

        猜你喜欢
        • 2017-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多