0

我有以下模型:

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

我有一个动作,它为此模型设置了一些值,然后将其返回到如下视图:

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,所以我希望它的最小长度为 7,但如果我将其设置为 UPS,我希望它的最小长度为 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 回答