2011-03-08 59 views
0

我遵循this article並通過測試,顯示自定義驗證錯誤消息是從Validator.IsValid(someEntity)調用失敗時從資源文件返回的。MVC 3,NHIbernate驗證器和消息插值器

我想把這個翻譯成新的不顯眼的客戶端驗證MVC3描述this article。這也或多或少的作品 - 以及客戶端驗證並因此我可以假設我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}。

我的兩個測試和網絡都usign相同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

你有沒有找到一個明確的解決方案呢? – DanP 2013-04-29 14:55:11

回答

0

我沒有運氣,這已經發布了幾個論壇。

最後,我使用了DataAnnotations來代替我的View Models進行客戶端驗證。

當然,這是非常糟糕的和可怕的「解決方案」,因爲我現在在代碼中有兩種類型的驗證屬性。 (如果想知道,是的,我寧願保持我的NH驗證屬性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; } 
    } 
0

你能證明你的代碼?我認爲你使用某種自定義ModelValidatorProvider

我有一些工作就像你所描述的。它需要編寫自定義AssociatedValidatorProviderModelValidator,沿着這裏

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

描述的線,但改變MessageOrDefault方法在文章中方可使用NHibernate的驗證DefaultMessageInterpolator翻譯的消息。

這聽起來像你得到了一些東西的工作方式,你只需要使用DefaultMessageInterpolator翻譯消息。

+0

是的,當我發郵件給你時,我正在那個地區釣魚。但必須繼續前進 - 那段時間花了相當長的時間,我放棄了。很多人想要注入一個該死的資源!當我有更少的截止日期時,我會看看它。 – 2011-03-10 22:04:23