我使用的是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>
在上面的代码中expression
是System.Linq.Expressions.Expression<Func<MyModels.Fax.FaxModel, object>> expression;
现在的问题是,即使错误匹配错误消息的值也不会冒泡。我没有得到这种行为的原因。需要帮助。
谢谢你们。
答案 0 :(得分:2)
内置了[Compare]
)这样的属性:
[Compare("ConfirmFaxNumber", ErrorMessage = "Fax number must match"]
public string FaxNumber { get; set; }
此实现不起作用的原因是因为它是类级别验证属性,不会添加与错误关联的键,因此@Html.ValidationMessageFor
帮助程序都不匹配此错误消息。如果您使用@Html.ValidationSummary(false)
助手,您可能会看到它。但是Compare
属性再次出现了
可能更适合你想要实现的目标。