我已经关注this article并且通过了测试,显示当对Validator.IsValid(someEntity)的调用失败时,从资源文件返回自定义验证错误消息。
我试图将此转换为this article描述的MVC3中新的不引人注意的客户端验证。这或多或少都有效 - 客户端验证确实如此,我可以假设我的NHValidators接线很好,你可以看到输出如下:
<input data-val="true" data-val-required="{NotNullNotEmpty}" id="Username" name="Username" type="text" value="" />
<span class="field-validation-valid" data-valmsg-for="Username" data-valmsg-replace="true">
我的问题是,这次CustomMessageInterpolator没有触发 - 该属性尚未翻译资源字符串(它仍然是大括号):{NotNullNotEmpty}。
我的测试和网络都使用相同的NHValidator配置:
var cfg = new FluentConfiguration();
cfg
.SetMessageInterpolator<CustomMessageInterpolator>()
.SetCustomResourceManager("MyProject.Core.Resources.ValidationMessages", Assembly.Load("MyProject.Core"))
.SetDefaultValidatorMode(ValidatorMode.UseAttribute)
.Register(Assembly.Load("MyProject.Core").ValidationDefinitions())
这里有一个很好的衡量标准:
public class LoginModel
{
[NotNullNotEmpty(Message = "{NotNullNotEmpty}")]
public string Username { get; set; }
远射我知道,但任何想法都会受到赞赏!
答案 0 :(得分:0)
我在几个论坛上发布它并没有运气。
最后,我在我的View Models中使用DataAnnotations进行客户端验证。
当然,这实际上是hacky和一个可怕的“解决方案”,因为我现在在我的代码中有两种类型的验证属性。 (如果想知道,是的,我宁愿保留我的NH Validation属性1.因为我仍然从他们生成我的模式和2.我喜欢NH在提交到数据库之前验证的方式,即服务器端)。
如果有兴趣,可以在how to use resource files显示控件的正确标签。
此代码段显示了如何设置自定义错误消息:
[DisplayResource(typeof(LabelResources))]
public class NewChildTagViewModel : ModuleViewModel
{
public int ParentId { get; set; }
[Required]
public string Title { get; set; }
[Range(1, 1000, ErrorMessageResourceType = typeof(ValidationMessages), ErrorMessageResourceName = "Display_Order")]
[Required]
public int? DisplayOrder { get; set; }
}
答案 1 :(得分:0)
你能展示你的代码吗?我认为您使用了某种自定义ModelValidatorProvider
?
我的工作就像你描述的那样。它需要按照此处描述的行编写自定义AssociatedValidatorProvider
和ModelValidator
但是更改上面文章中的MessageOrDefault方法以使用NHibernate Validator DefaultMessageInterpolator
来翻译消息。
听起来你已经完成了大部分工作,而你只需要使用DefaultMessageInterpolator
翻译消息。