MVC 3, NHIbernate Validators & Message Interpolator

…衆ロ難τιáo~ 提交于 2019-12-08 12:52:50

问题


I have followed this article and have a passing test showing custom validation error messages being returned from a resource file when a call to Validator.IsValid(someEntity) fails.

I am trying to translate this to the new unobtrusive client-side validation in MVC3 describe by this article. This also more or less works - well the client-side validation does so I can assume my wiring of NHValidators is good, as you can see the following is output:

<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">

My problem is that this time the CustomMessageInterpolator has not fired - the resource string has not been translated for this property (it's still in curly braces): {NotNullNotEmpty}.

Both my test and the web are usign the same NHValidator config:

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())

Just for good measure here's the model snippet:

public class LoginModel
  {
    [NotNullNotEmpty(Message = "{NotNullNotEmpty}")]
    public string Username { get; set; }

Long shot I know but any ideas would be appreciated!


回答1:


I had no luck with this having posted it around a few forums.

In the end I've resorted to using DataAnnotations instead in my View Models for client-side validation.

Of course this is really hacky and a horrible "solution" as I've now two types of validation attributes in my code. (if wondering, yes I'd rather keep my NH Validation attributes 1. as I'm still generating my schema from them and 2. I like the way NH validates before committing to the db i.e. server-side).

If interested, here's how to use resource files to show the correct labels for your controls.

This code snippet shows how to then also rig up custom error messages:

  [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; }
  }



回答2:


Can you show your code? I presume you used some sort of custom ModelValidatorProvider?

I've got something working like what you described. It required writing a custom AssociatedValidatorProvider and ModelValidator, along the lines described here

http://weblogs.asp.net/srkirkland/archive/2010/07/20/nhibernate-client-validator-asp-net-mvc-2-model-validation.aspx

but changing the MessageOrDefault method in the article above to use the NHibernate Validator DefaultMessageInterpolator to translate the messages.

It sounds like you got most of the way towards getting something working, and you just needed to use the DefaultMessageInterpolator to translate the messages.



来源:https://stackoverflow.com/questions/5237853/mvc-3-nhibernate-validators-message-interpolator

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!