2013-01-21 77 views
0

現在,它只是顯示一個通用的我必須做些什麼才能讓FluentValidation顯示我的自定義消息?

'縮寫'不應該是空的。以下規則

消息:

context.RulesFor(p => p.Initials).Required(p => p.Message("Initials are frikking required.")).Length(0, 8); 

首字母歡迎使用屬性是ApplicantProfileModel : MappedViewModel<ApplicantProfile>類型,只是簡單public string Initials { get; set; }的一個相當大的模型中聲明,甚至沒有顯示名稱屬性,但我有同樣的問題即使我添加顯示名稱。

我沒有在視圖模型中留下Required屬性。

控制器動作代碼是:

[HttpGet] 
public ActionResult Create() 
{ 
    var applicant = _applicantService.BuildApplicantProfile(); 
    var model = new ApplicantProfileModel(); 
    model.MapFromEntity(applicant); 
    return View(model); 
} 

這是我對我的最後許許多多項目的標準代碼,一切正常,除了FluentValidation自定義消息。他們的驗證很好。

的觀點是:

<li class="form-line"> 
    @Html.LabelFor(m => m.Initials) 
    @Html.EditorFor(m => m.Initials) 
    @Html.ValidationMessageFor(m => m.Initials) 
</li> 

我試圖TextBoxFor爲好,但沒有什麼區別。

+0

你的代碼似乎很好。什麼是'Initials'屬性的類型?你能否展示一個完整的例子(包括模型,視圖和控制器)來重現你在這裏描述的問題? –

回答

0

您是否在屬性上留下了[Required] DataAnnotation屬性?我發現如果他們一直留在那裏,那些會顯示而不是我的自定義驗證規則。

編輯:這是我如何在過去設置驗證程序 - 也可能是因爲您正在執行HttpGet而不是HttpPost而您需要手動調用驗證?

public class ApplicantProfileModelValidator : AbstractValidator<ApplicantProfileModel> 
{ 
    public ApplicantProfileModelValidator() 
    { 
     RuleFor(r => r.Initials) 
      .NotEmpty() 
      .WithMessage("Initials are frikking required."); 
    } 
} 
+0

不是,在該模型中的任何地方都不是一個'Required'。這是我與Fluent合作的第一個模特。 – ProfK

+0

您能否顯示驗證器的完整代碼?這可能是你設置的方式 – levelnis

0

原來我混淆了兩個不同的,但非常相似的valiation庫。我最初開始於ASP.NET MVC fluent validation framework,或在NuGet上已知爲FluentMVC。這要求你的模型實現一個名爲InitializeModel(ModelContext<TModel> context)的方法,其中你爲各種屬性添加規則,例如

context.RulesFor(p => p.Id).Required(p => p.Message("Id is missing. Message may have been tampered with.").StopOnFail()); 

確認引擎不知何故呼籲所有車型這種方法,因爲雖然奉命執行您的驗證的模型的IModelInitializer<TModel>接口,我不是。這並不是說規則正在被註冊,但是這個庫的某些部分是活躍的,並且正在與我正在嘗試使用的庫進行協作,在NuGet上已知其爲FluentValidation,FluentValidation.MVC3和FluentValidation.MVC4。

從我的模型中刪除了InitializeModel mehod,事情似乎有效。我現在驗證的粗略測試消息顯示,所以他們不會偷偷經過測試和發佈經理。

+0

不要忘記標記你的答案被接受 – Mutmatt

相關問題