我有一個簡單的模型FilesModel
更新字符串Description
和複選框Archived
的幾個(已上傳)文件的布爾值,並FilesModel
有一個驗證FilesModelValidator
當這些數據被髮布時它會運行。這個驗證器不過是檢查每個文件是否有描述。我知道它運行並根據我的調試到目前爲空描述正確返回一個錯誤。MVC驗證錯誤的時間控制消失給予控制器
但是,當控制器中的Action方法被給予控制時,ModelState與我所期望的不同。說明字段上沒有錯誤,但每個選中的複選框都有一個錯誤:「'上'的值對存檔無效。」
驗證此類工作在網站的其他方面工作得很好,所以我確定有一些我可以忽略的東西。任何有關爲什麼會發生這種情況的建議以及如何解決它?
驗證
public FilesModelValidator()
{
RuleFor(f => f.Files)
.Must(AllHaveADescription).WithMessage("Must have a description");
}
public static bool AllHaveADescription(Files files)
{
// This is run on postback, and returns false when any Description is empty
return files.All(f => f.Description != null && f.Description.Length > 0);
}
控制器
[HttpPost]
public virtual ActionResult Update(FilesModel model)
{
// At this point, ModelState contains an error for each checked checkbox
// and no errors for empty descriptions
if (ModelState.IsValid)
{
// Save
}
return View(model);
}
你怎麼會有你的驗證器連接好?屬性屬性還是隻是一些基於實體的邏輯? – jeriley 2010-04-27 18:40:51
屬性。以下是'FilesModel'類的屬性:'[Validator(typeof(FilesModelValidator))]' – Aaron 2010-04-27 18:42:03
它可以簡單地運行驗證兩次並刪除您的退出錯誤? (使用自定義模型綁定器可能?)另外,我依稀記得有關注冊數據註釋(?)的東西..但這會給你所有的問題,並且你正在使用一個以上的權利? – jeriley 2010-04-27 19:48:54