数据注释不会弹出错误消息

时间:2011-04-18 11:49:48

标签: asp.net asp.net-mvc-3 razor

我使用的是Asp.Net 4 MVC 3.0和Razor。我需要检查两个字符串的相等性。所以我使用属性为类做了这个。我从here获得了代码 这就是我使用该属性的方式。

    [Match("FaxNumber", "ConfirmFaxNumber", ErrorMessage = "Fax number must match")]
    public class FaxModel
    {

        [Required, StringLength(maximumLength: 10, MinimumLength = 10),
        RegularExpression(@"^([0-9]( |-)?)?(\(?[0-9]{3}\)?|[0-9]{3})( |-)?([0-9]{3}( |-)?[0-9]{4})$",
            ErrorMessage = "Enter correct fax number.")]
        [Display(Name = "Fax number")]
        public string FaxNumber { get; set; }

        [Required, StringLength(maximumLength: 10, MinimumLength = 10),
        RegularExpression(@"^([0-9]( |-)?)?(\(?[0-9]{3}\)?|[0-9]{3})( |-)?([0-9]{3}( |-)?[0-9]{4})$",
            ErrorMessage = "Enter correct fax number.")]
        [Display(Name = "Confirm fax number")]
        public string ConfirmFaxNumber { get; set; }

     }

这是两个字段的UI实现。

           <div data-role="fieldcontain" class="template">
                @Html.LabelFor(expression = (m => m.FaxNumber), labelText: "Fax number:") @Html.TextBoxFor(expression: expression, htmlAttributes: new { name = "FaxNumber", value = "${FaxNumber}" })
                <blockquote>@Html.ValidationMessageFor(expression)</blockquote>
            </div>
            <div data-role="fieldcontain" class="template">
                @Html.LabelFor(expression = (m => m.ConfirmFaxNumber), labelText: "Confirm fax number:")
                @Html.TextBoxFor(expression: expression, htmlAttributes: new { name = "ConfirmFaxNumber", value = "" })
                <blockquote>@Html.ValidationMessageFor(expression)</blockquote>
            </div>

在上面的代码中expressionSystem.Linq.Expressions.Expression<Func<MyModels.Fax.FaxModel, object>> expression;

现在的问题是,即使错误匹配错误消息的值也不会冒泡。我没有得到这种行为的原因。需要帮助。

谢谢你们。

1 个答案:

答案 0 :(得分:2)

内置了[Compare])这样的属性:

[Compare("ConfirmFaxNumber", ErrorMessage = "Fax number must match"]
public string FaxNumber { get; set; }

此实现不起作用的原因是因为它是类级别验证属性,不会添加与错误关联的键,因此@Html.ValidationMessageFor帮助程序都不匹配此错误消息。如果您使用@Html.ValidationSummary(false)助手,您可能会看到它。但是Compare属性再次出现了 可能更适合你想要实现的目标。