C# 验证属性取决于对象实例类型
我面临着一个怀孕的问题。我们可以通过两种方式创建和更新交易:使用web表单(一种用于创建交易,另一种用于编辑交易)和通过集成文件(允许大规模创建和更新) 我有一个验证逻辑要实现:在交易创建时,只接受活跃的销售人员;在更新中,接受活动销售人员加上以前的销售人员值(存储在DB中) 我写了这样的东西: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
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
}
}
}