2011-04-18 68 views
0

我正在使用Asp.Net 4 MVC 3.0和Razor。我需要檢查兩個字符串的相等性。所以我爲這個類使用了Attribute。我從here得到了代碼。
這是我如何使用該屬性。DataAnnotation不會彈出ErrorMessage

[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;

現在的問題是,即使值誤匹配錯誤消息不冒泡。我沒有得到這種行爲的原因。需要幫助。

謝謝全部。

回答

2

已經有內置這樣的屬性([Compare]):

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

這種實現是不工作的原因是因爲它是一個類級別的驗證屬性,它不會增加與錯誤的關鍵,所以@Html.ValidationMessageFor助手都不匹配此錯誤消息。如果您使用@Html.ValidationSummary(false)幫手,您可能會看到它。但再一次,Compare屬性爲 可能更適合您嘗試實現的內容。

+0

謝謝@Darin。它的工作,但我面臨一個屬性的新問題。一旦錯誤消息彈出到屏幕上,它不會重置。錯誤信息卡住了。其他所有屬性都正常工作。 – SocialCircus 2011-04-18 12:35:45