2012-09-12 50 views
3

在我的項目中,我有幾個用戶需要提供一個數量(以磅和便士計)的實例,並且它必須在Int32範圍內所以它可以轉換爲數據庫。我認爲這將是可能做到這一點:模型驗證的自定義範圍屬性不會生成jQuery驗證屬性

/// <summary> 
/// Range attribute to ensure that entered value can be converted to an int32 
/// </summary> 
public class PoundsAndPenceAttribute : RangeAttribute 
{ 
    public PoundsAndPenceAttribute(double minimum = (double)int.MinValue/100, double maximum = (double)int.MaxValue/100) 
     : base(minimum, maximum) 
    { 
    } 
} 

不幸的是它不會產生客戶端JavaScript數據-VAL範圍的屬性,雖然它驗證它的服務器端。有沒有更好的方式做這個或我必須寫一個自定義驗證器?

回答

4

嘗試實施IClientValidatable接口:

public class PoundsAndPenceeAttribute : RangeAttribute, IClientValidatable 
{ 
    public LocalizeRange(double minimum = (double)int.MinValue/100, double maximum = (double)int.MaxValue/100) 
: base(minimum, maximum) 
    { 
    } 

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) 
    { 
     var rule = new ModelClientValidationRule 
     { 
      ErrorMessage = ErrorMessage, 
      ValidationType = "range" 
     }; 

     rule.ValidationParameters.Add("min", Minimum); 
     rule.ValidationParameters.Add("max", Maximum); 

     yield return rule; 
    } 
} 

它應該做的工作。