Validation 必填字段的自定义验证
嗨,我想做这样的验证Validation 必填字段的自定义验证,validation,c#-4.0,model-view-controller,asp.net-web-api,data-annotations,Validation,C# 4.0,Model View Controller,Asp.net Web Api,Data Annotations,嗨,我想做这样的验证 [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代码来实现
[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代码来实现低调和所有的功能。我只需要服务器端验证
请不要建议使用单独的型号,我不能这样做。类似的解决方案也可以
让我知道,如果这需要更多的澄清,任何帮助将不胜感激 如果您同意将验证数据注释放在类本身上,您可以像Gary.S对这篇文章的回答那样做 在essense中,只需创建一个新的自定义验证属性,因为它是类级别的属性,所以您可以访问对象本身,从而访问其他属性 假设类名为“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;
}
}
记住,只有在类上设置属性,而不是在NotesId属性上设置属性时,这才有效。我想像[RequiredCustomActionType=intAction.Update,ActionType=intAction.Delete]那样使用它。你可以说得更具体一些,我对你的解决方案不是很清楚。对象是否包含我的ActionType属性?Ajay,我更新了答案,使其更清晰一些。请记住,正如我最初所说的,如果您在类上使用属性,那么验证依赖于类的另一个属性,而不是NotedID属性本身,那么这将起作用。如果您想在属性等上添加一些验证消息,这可能不是您期望的答案,但应该会给您一个想法。如果您有任何问题,请告诉我。嗨@Krishna,这并不能解决我的问题,因为我有多个属性用于此操作
[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; }
}