2011-06-26 34 views
0

我在我的項目中使用.NET 4 MVC 2。我基本上有兩個類,我用它來驗證。 A類是我的(主)模型,B類是A類可能具有的複合屬性。代碼如下所示:.net mvc 2驗證:總結幾個屬性的值

 
[Bind(Exclude = "A_ID")] 
    public class A_Validation 
    { 
     [Required(ErrorMessage = "something is missing")] 
     public string title { get; set; } 

     // some more attributes ... 

     public B b { get; set; } 
    } 

我所有基於A類的驗證工作都非常好。但是現在我想驗證複合屬性B,看起來像下面這樣。

 
[Bind(Exclude = "B_ID")] 
    public class B_Validation 
    { 
     [Required(ErrorMessage = "missing")] 
     [Range(1, 210, ErrorMessage = "range between 1 and 210")] 
     public int first { get; set; } 

     [Required(ErrorMessage = "missing")] 
     [Range(1, 210, ErrorMessage = "range between 1 and 210")] 
     public int second { get; set; } 

     [Required(ErrorMessage = "missing")] 
     [Range(1, 210, ErrorMessage = "range between 1 and 210")] 
     public int third { get; set; } 
    } 

我能夠檢查的範圍B的三個屬性第一第三我還想要的是檢查和所有三種屬性第一第三低於某一閾值的

任何想法如何進行?

我認爲ViewModels可能會有幫助,但我沒有使用它們的經驗。

回答

0

您是否嘗試過寫一個自定義的驗證屬性:

public class SumBelowAttribute : ValidationAttribute 
{ 
    private readonly int _max; 
    public SumBelowAttribute(int max) 
    { 
     _max = max; 
    } 

    public override bool IsValid(object value) 
    { 
     var b = value as B_Validation; 
     if (b != null) 
     { 
      return b.first + b.second + b.third < _max; 
     } 
     return base.IsValid(value); 
    } 
} 

,然後用這個屬性裝點B屬性:

[SumBelow(123)] 
public B b { get; set; } 
+0

@Darin我已經做到了這一點,但應該如何視圖能夠顯示此驗證結果? _first_,_second_和_third_都是我可以通過使用'<%:Html.ValidationMessageFor(model => model.B.first)%>'驗證的所有屬性 - 我應該如何處理總和? –

+0

@Jaques le Fraque,因爲這個屬性適用於許多你不再使用ValidationMessageFor來顯示錯誤信息的屬性。你可以使用'ValidationSummary'助手來顯示它。 –

+0

@Darin Dimitrov,我通過'[SumBelow(123,ErrorMessage =「sum below 123」)]'提供的'ErrorMessage'不會顯示在'ValidationSummary'中。無論如何,我也嘗試添加一個客戶端驗證,根本沒有觸發 –