所以我有下面的模型,我正在尝试创建自定义数据注释来验证我的数据。这是一个RequiredIf()。第一个参数是属性名称,第二个参数是属性名称应该等于的内容。
我要做的是让它查看QuestionViewModel QuestionType并查看它是否为“text”,如果是,那么此字段是必需的。但我在QuestionOptionViewModel内,我不确定如何创建一个将访问QuestionViewModel的注释?
因此,如果您注意到以下逻辑在QuestionViewModel上运行良好。但不是当我在QuestionOptionViewModel里面时。如何访问requiredIf类中另一个viewmodel中的属性?
模型:
public class QuestionViewModel
{
public int? Id { get; set; }
public string QuestionType { get; set; }
public string SubType { get; set; }
public string Text { get; set; }
public int SortOrder { get; set; }
public bool IsHidden { get; set; }
[RequiredIf("QuestionType", "radio", ErrorMessage = "Radio Reqired")]
public int? Selected { get; set; }
public List<QuestionOptionViewModel> Options { get; set; }
}
public class QuestionOptionViewModel
{
public int? Id { get; set; }
public string Text { get; set; }
[RequiredIf("QuestionType", "text", ErrorMessage = "Required Field")]
public string Value { get; set; }
public bool IsChecked { get; set; }
}
定制数据注释:
public class RequiredIfAttribute : RequiredAttribute
{
private String PropertyName { get; set; }
private Object DesiredValue { get; set; }
public RequiredIfAttribute(String propertyName, Object desiredValue)
{
PropertyName = propertyName;
DesiredValue = desiredValue;
}
protected override ValidationResult IsValid(object value, ValidationContext context)
{
Object instance = context.ObjectInstance;
Type type = instance.GetType();
Object propertyValue = type.GetProperty(PropertyName).GetValue(instance, null);
if (propertyValue.ToString() == DesiredValue.ToString())
{
ValidationResult result = base.IsValid(value, context);
return result;
}
return ValidationResult.Success;
}
}
答案 0 :(得分:0)
尝试“QuestionViewModel.QuestionType”
答案 1 :(得分:0)
在我看来,即使通过反思也无法知道。 请考虑以下情形:
QuestionViewModel qvm1 = new QuestionViewModel();
QuestionViewModel qvm2 = new QuestionViewModel();
List<QuestionOptionViewModel> qovm = new List<QuestionOptionViewModel>();
qvm1.Options = qovm;
qvm2.Options = qovm;
这就是为什么无法获取包含该问题的QuestionViewModel实例的原因,因为可以有多个QuestionViewModel引用指向同一个List对象。