2012-03-28 12 views
0

私は、次のモデルがあります。そのビューで条件付きモデルの検証

DeliveryTracking track = new DeliveryTracking(); 
track.SalesID = 123; 
track.PackingSlipID = 456; 
track.Type = "TNT"; 
return PartialView("_GetForm", track); 

:私はセットは、このモデルのためにいくつかの値だとそのようになどのビューに戻す作用を有する

public class DeliveryTracking 
    { 
     public string TrackingRef { get; set; } 
     public string SalesID { get; set; } 
     public string PackingSlipID { get; set; } 
     public string Type { get; set; } 
    } 

@Html.HiddenFor(model => model.SalesID) 
@Html.HiddenFor(model => model.PackingSlipID) 
@Html.HiddenFor(model => model.Type) 
@Html.EditorFor(model => model.TrackingRef) 
<input type="submit" value="Submit" /> 

は、私が欲しいAGAを検証するために、このTrackingRef:私は、私はそうのようなTrackingRefを設定することができるよた形態を持っています私が使用しているトラッキングの種類に応じて異なる長さ。たとえば、私は追跡タイプをTNTに設定していますので、minlengthを7にしたいのですが、UPSに設定した場合、minlengthが8になるようにしたいのですが、これは可能ですか?私はモデル内でMinLength属性を設定できることは知っていますが、私はこれを使用するトラッキングのタイプに基づいて動的/条件付きにします。

+0

可能重複[?私はIValidatableObjectを使用するにはどうすればよい](http://stackoverflow.com/questions/3400542/how-do-i -use-ivalidatableobject) – Jon

答えて

1

条件付き検証ルールを追加できます。モデルをIValidatableObjectに継承させ、Validateメソッドを実装します。あなたは(私はそれをテストしていない)、以下の何かができる:

public class DeliveryTracking : IValidatableObject 
    { 
     public string TrackingRef { get; set; } 
     public string SalesID { get; set; } 
     public string PackingSlipID { get; set; } 
     public string Type { get; set; } 
    } 

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
{ 
    if (Type ==typeOf(TNT) && TrackingRef.Length < 7 
     return new ValidationResult("TrackingRef must be 7."); 
    if(Type == typeOf(UPS) && TrackingRef.Length < 8) 
     return new ValidationResult("TrackingRef must be 8."); 
} 
+0

ありがとう、これは私を正しい軌道に乗せる! – CallumVass