0

私は次のモデルを持っています:

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

このモデルにいくつかの値を設定し、次のようにビューに返す Action があります。

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

そのビューには、次のように TrackingRef を設定できるフォームがあります。

@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" />

使用しているトラッキングのタイプに応じて、この TrackingRef をさまざまな長さに対して検証する必要があります。たとえば、追跡タイプを TNT に設定したので、minlength を 7 にしたいのですが、UPS に設定した場合は minlength を 8 にしたいのですが、これは可能ですか? モデルで属性を設定できることはわかっていMinLengthますが、使用している追跡のタイプに基づいて動的/条件付きにしたいと考えています。

4

1 に答える 1

1

条件付き検証ルールを追加できます。モデルにfomIValidatableObjectを継承させ、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.");
}
于 2012-03-28T10:23:41.087 に答える