Helllo .....我是微软企业库验证框架的新手。我的问题是我想在两个不同的RuleSet中使用相同的验证条件。 是否可以将两个规则集放在同一个Validator中,如下所示
/// <summary>
///
/// </summary>
[StringLengthValidator(1,25,Ruleset="DetailRuleSet",Ruleset="MainRuleSet",Tag="First Name")]
public string FirstName
{
get { return firstName; }
set { firstName = value; }
}
或者我已经两次使用不同的规则集名称(如下面的
)写了相同的内容 /// <summary>
///
/// </summary>
[StringLengthValidator(1,25,Ruleset="DetailRuleSet",Tag="First Name")]
[StringLengthValidator(1, 25, Ruleset = "MainRuleSet", Tag = "First Name")]
public string FirstName
{
get { return firstName; }
set { firstName = value; }
}
任何帮助都将不胜感激!!
答案 0 :(得分:0)
首先是免责声明:我在企业库应用程序验证块上没有那么多工作,但是,作为程序员已经超过十五年了,并且使用了ASP.NET的验证模型对于MVC Data Annotations,我可以告诉你,Enterprise Library中的验证API非常相似。我花了大约20分钟下载企业库源代码并查找这个问题的答案。所以,这是我的答案。
是的,您可以将多个验证属性应用于给定的模型属性,每个验证属性指定不同的规则集。
但是,在这种情况下,您必须在该特定规则集的模型类型上显式调用验证器。
如果不这样做,企业库将执行默认规则集的验证器。
在您的示例中,您可以说:
StringLengthValidator(1,25,Ruleset="DetailRuleSet",Tag="First Name")]
[StringLengthValidator(1, 25, Ruleset = "MainRuleSet", Tag = "First Name")]
public string FirstName
{
get { return firstName; }
set { firstName = value; }
}
但是,在这种情况下,您必须专门调用其中一个规则集进行验证,如下所示:
var yourModelObjectValidator =
yourValidatorFactory.CreateValidator<YourModelClass>("yourRuleSetName");
var yourModelObject =
new YourModelClass { Foo = "foo", Bar = "bar", Gar = 2 };
var results =
yourModelObjectValidator.Validate(yourModelObject);
if (!results.IsValid)
{
foreach(var result in results)
{
/* run the state machine, do whatever, print */
}
}
如果您没有像我们上面那样指定规则集名称,那么企业库将在没有名称的默认规则集的上下文中执行您的验证,因此您没有使用验证在上面指定的两个规则属性将被执行。
<强>更新强>
根据您的评论,我看到您真正的问题是什么。
您的问题实际上是:我可以在单个验证属性声明中指定多个规则集吗?
答案就像问题一样简单:不。因为RuleSet
类中的属性string
被简单地声明为IEnumerable<string>
而不是BaseValidationAttribute
EntLib源代码中的所有ValidatorAttribute
类。