您需要創建自定義驗證屬性 - 網上有很多幫助。以下是對類似依賴屬性的改編。
public class GreaterThanOtherAttribute : ValidationAttribute, IClientValidatable
{
public string DependentProperty { get; set; }
public GreaterThanOtherAttribute (string dependentProperty)
{
this.DependentProperty = dependentProperty;
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
// get a reference to the property this validation depends upon
var containerType = validationContext.ObjectInstance.GetType();
var field = containerType.GetProperty(this.DependentProperty);
if (field != null)
{
// get the value of the dependent property
var dependentvalue = field.GetValue(validationContext.ObjectInstance, null);
// compare the value against the target value
if ((dependentvalue == null && this.TargetValue == null) ||
(dependentvalue != null && dependentvalue < this.TargetValue)))
{
// match => means we should try validating this field
return new ValidationResult(this.ErrorMessage, new[] { validationContext.MemberName });
}
}
return ValidationResult.Success;
}
,然後裝點你的模型:
public class id
{
[Required]
public decimal l_ID
{
get;
set;
}
[Required]
[GreaterThanOtherAttribute("l_ID")]
public decimal v_ID
{
get;
set;
}
}
你現在需要做的是找到一個示例自定義屬性,並適應它使用上面。
健康警告 - 這未經任何測試,可能包含錯誤。
祝你好運!
太棒了!這工作。只是一個快速跟進問題。如果我想將輸入v_ID的用戶與從URL傳入的參數進行比較,那麼驗證規則將如何更改,如何從瀏覽器中獲取該參數。 – deep
ViewModel的URL參數部分,還是可以?我就是這麼做的。 ViewModel應該包含「頁面」運行操作所需的所有內容。一旦所有內容都在ViewModel中,Validate方法只需查看這些字段即可完成其邏輯。用特定的scenerio回到這裏,或者打開一個更新,更具體的問題(並讓我知道)。 – Graham
是的,我添加了兩個字段,如old_v_id和old_l_id到viewmodel,我現在應該可以使用它。非常感謝 – deep