【发布时间】:2014-12-10 00:11:29
【问题描述】:
当尝试使用流式验证规则的 WithMessage 部分中的属性时,不使用字符串属性,而是仅输出 true。我已经在应用程序的其他区域使用集合进行了验证(这不太直接),我可以毫无问题地执行此任务。这里唯一的区别是它是一个带有基类的单个对象。
这是我的验证器:
public class MultiCulturalControlValidator : AbstractValidator<TitleMultiCulturalControlProperty>
{
public MultiCulturalControlValidator()
{
RuleFor(x => x.EnglishValue).NotEmpty().WithMessage("test error {0}", x => x.DisplayName);
}
}
我的视图模型,去掉了所有不相关的属性:
[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 字符串。我检查了,发布数据时名称不为空/空。我已经检查了所有的帮助,但找不到任何涉及此问题的内容。
谢谢
【问题讨论】:
-
您是在尝试访问属性
string DisplayName的值还是[Display]属性中的值? -
属性的值。
-
我不熟悉 FluentValidation,但应该是
.WithMessage(String.Format("test error {0}", x => x.DisplayName)); -
不能将格式与表单(字符串、lambda)一起使用。没有骰子。
-
根据this documentation,你所做的应该是有效的
标签: c# asp.net-mvc validation fluentvalidation