MVC FluentValidation WithMessage使用属性

时间:2014-12-10 00:11:29

标签: c# asp.net-mvc validation fluentvalidation

尝试在流畅的验证规则的WithMessage部分中使用属性时,不使用字符串属性,而只是输出true。我已经在使用集合的应用程序的其他区域中使用了验证(这不那么简单),我可以毫无问题地执行此任务。这里唯一的区别是它是一个带有基类的单个对象。

这是我的验证员:

public class MultiCulturalControlValidator : AbstractValidator<TitleMultiCulturalControlProperty>
{
    public MultiCulturalControlValidator()
    {
        RuleFor(x => x.EnglishValue).NotEmpty().WithMessage("test error {0}",  x => x.DisplayName);
    }
}

我的viewmodel,删除了所有不相关的属性:

[Validator(typeof(MultiCulturalControlValidator))]
[DataContract]
public class TitleMultiCulturalControlProperty : MultiCulturalControlProperty
{
    public TitleMultiCulturalControlProperty()
    {
    }

    /// <summary>
    /// Gets or sets the name of these culture table values.
    /// </summary>
    [DataMember]
    public string DisplayName { get; set; }

    /// <summary>
    /// Gets or sets the required english value.
    /// </summary>
    // ReSharper disable once LocalizableElement
    [Display(Name = "English")]
    [StringLength(255)]
    [DataMember]
    public override string EnglishValue { get; set; }
}

如您所见,覆盖了所需的英语值。这是问题吗?但规则仍然正确运行,而且只是消息不正确。

规则未通过时显示的消息:

“测试错误为真”

'true'应为DisplayName字符串。我检查过,发布数据时名称不为空/空。我已经检查了所有的帮助,我找不到任何涉及这个问题。

由于

2 个答案:

答案 0 :(得分:0)

答案太迟了,但我想知道你是否继承了&#34; MultiCulturalControlProperty&#34;是问题。

答案 1 :(得分:0)

我知道这很古老,但是我在寻找类似问题的解决方案时才发现了这个问题。这是我最终使用的语法(针对原始问题进行了重新设计)。

public class MultiCulturalControlValidator : AbstractValidator<TitleMultiCulturalControlProperty>
{
    public MultiCulturalControlValidator()
    {
         RuleFor(x => x.EnglishValue).NotEmpty().WithMessage(x => string.Format("test error {0}",  x.DisplayName));
    }
}