Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 验证属性取决于对象实例类型_C#_Asp.net Mvc 4_Data Annotations_Validationattribute - Fatal编程技术网

C# 验证属性取决于对象实例类型

C# 验证属性取决于对象实例类型,c#,asp.net-mvc-4,data-annotations,validationattribute,C#,Asp.net Mvc 4,Data Annotations,Validationattribute,我面临着一个怀孕的问题。我们可以通过两种方式创建和更新交易:使用web表单(一种用于创建交易,另一种用于编辑交易)和通过集成文件(允许大规模创建和更新) 我有一个验证逻辑要实现:在交易创建时,只接受活跃的销售人员;在更新中,接受活动销售人员加上以前的销售人员值(存储在DB中) 我写了这样的东西: public class ValidateSalesman : ValidationAttribute { protected override ValidationResult IsValid

我面临着一个怀孕的问题。我们可以通过两种方式创建和更新交易:使用web表单(一种用于创建交易,另一种用于编辑交易)和通过集成文件(允许大规模创建和更新)

我有一个验证逻辑要实现:在交易创建时,只接受活跃的销售人员;在更新中,接受活动销售人员加上以前的销售人员值(存储在DB中)

我写了这样的东西:

public class ValidateSalesman : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        var container = validationContext.ObjectInstance;
        if (container.GetType() == typeof(IntegrationLine))
        {
            if(((IntegrationLine)container).Status == "CREATION") 
            {
                //Validation logic here
            }
            else 
            {
                 //Validation logic here
            }
        }
        else if(container.GetType() == typeof(CreateDealViewModel)) 
        {
           //Validation logic here
        } 
        else if(container.GetType() == typeof(EditDealViewModel)) 
        {
           //Validation logic here
        } 
     }
 }
}

这是一个好方法(符合MVC)还是不好?验证属性是否必须知道它应用于哪种模型


提前感谢您的建议:)

您需要检查这个问题,这个问题现在正在类似的主题上运行-您的方法很有趣(通用验证属性和数据库访问存储库的使用)。但我仍然有一个疑问:在您的示例中,您将要检查的值传递给验证器。在我的例子中,我应该发送两个参数(值和创建/更新状态),因此我仍然需要检查容器类型(CreateDealModelView、EditDealModelView或IntegrationFile)。做这件事有什么不对吗?或者我应该将整个容器发送给validator命令吗?在我的方法中,我只发送命令类型。你也应该这样做。说create commands-CreateCommand、EditCommand等,然后将其传递给validation属性。好的,但是如何知道是否应该为IntegrationFile调用EditCommand或CreateCommand?(可能是创建或更新状态)。例如-
[Validate(IIntegrationLineCommand)]public int-alesmanID{get;set;}
您需要检查这个问题,这个问题现在正在类似的主题上运行-您的方法很有趣(通用验证属性和数据库访问库的使用)。但我仍然有一个疑问:在您的示例中,您将要检查的值传递给验证器。在我的例子中,我应该发送两个参数(值和创建/更新状态),因此我仍然需要检查容器类型(CreateDealModelView、EditDealModelView或IntegrationFile)。做这件事有什么不对吗?或者我应该将整个容器发送给validator命令吗?在我的方法中,我只发送命令类型。你也应该这样做。说create commands-CreateCommand、EditCommand等,然后将其传递给validation属性。好的,但是如何知道是否应该为IntegrationFile调用EditCommand或CreateCommand?(可能具有创建或更新状态)。例如-
[Validate(IIntegrationLineCommand)]public int-alesmanID{get;set;}
public class ValidateSalesman : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        var container = validationContext.ObjectInstance;
        if (container.GetType() == typeof(IntegrationLine))
        {
            if(((IntegrationLine)container).Status == "CREATION") 
            {
                //Validation logic here
            }
            else 
            {
                 //Validation logic here
            }
        }
        else if(container.GetType() == typeof(CreateDealViewModel)) 
        {
           //Validation logic here
        } 
        else if(container.GetType() == typeof(EditDealViewModel)) 
        {
           //Validation logic here
        } 
     }
 }