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; }
}