我有以下型号:
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,因此我希望它的最小长度为7,但如果我将其设置为UPS,我希望它的最小长度为8,这可能吗?我知道我可以在我的模型中设置MinLength
属性,但我希望它是基于我使用的跟踪类型的动态/条件。
答案 0 :(得分: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.");
}