嗨,我想要验证这种类似的东西
[RequiredCustom(ActionType=(int)Action.Update, ActionType=(int)Action.Delete)]
public string NotesID { get; set; }
[Required]
[RegularExpression("1|2|3|4")]
public int ActionType { get; set; }
我希望仅在进行更新和删除时验证此NotesID。我不需要任何不引人注目的javascript代码。我只想要服务器端验证。
请不要建议使用单独的模型我不能这样做。类似的解决方案也可以。
如果这需要更多说明,请告诉我。非常感谢任何帮助。
答案 0 :(得分:0)
如果你可以将验证数据注释放在类本身上,你可以做一些像这篇文章的回答(由Gary.S建议)。
在本质上,只需创建一个新的自定义验证属性,并且由于它是类级别的属性,您将可以访问该对象本身,从而访问其他属性。
您的自定义属性应该看起来像这样(假设您的类名是'Notes')
public class RequiredCustom: ValidationAttribute
{
List<int> actions;
public RequiredCustom(int[] actions)
{
this.actions = new List<int>();
this.actions.AddRange(actions);
}
public override bool IsValid(object value)
{
bool isValid = true;
Notes testVal = value as Notes;
if(this.actions.Contains((int)testVal.Action))
{
if(string.IsNullOrWhiteSpace(testVal.NotesID))
{
isValid = false;
}
}
return isValid;
}
}
然后,在类上添加validation属性并发送要测试的枚举数组。通过这种方式,它将足够动态,以便稍后发送。在这种情况下,我发送了更新和删除枚举的ARRAY,因为你有这两个特例。
[RequiredCustom(new int[] {(int)Action.Update, (int)Action.Delete)}]
public class Notes
{
public string NotesID { get; set; }
[Required]
[RegularExpression("1|2|3|4")]
public int ActionType { get; set; }
}
请记住,只有在类上设置属性而不是在NotesId属性上设置属性时,这才有效。