我使用的是asp.net mvc 3 jQuery不顯眼的驗證。我最近從標準DataAnnotations更改爲FluentValidation,它工作得很好。嵌套(集合)屬性mvc clientside驗證
我選擇FluentValidation的主要原因是需要驗證我的viewmodel的嵌套屬性(但我發現還有其他很酷的使用它的理由),看起來像這樣(不介意這是僞參數):
class Vm {
string Prop;
string AnotherProp;
IEnumerable<ElementsVm> Elements;
}
class ElementsVm {
bool Required;
string Id;
string Title;
string Value;
}
使用FluentValidation我做一個驗證的虛擬機和ElementVm和我的單元測試是綠色的,我展示服務器端驗證工作。客戶端,'Prop'和'AnotherProp'正在工作 - 我的驗證規則也像預期的那樣運行在客戶端(與DataAnnontation一樣),但是我的所有元素都沒有得到任何客戶端驗證 - 我檢查了DOM,並可以看到所有的數據val,數據需求等屬性丟失。
我已經嘗試了不同的方法來在我的視圖中生成html,但'Prop'和'AnotherProp'是使用Html.TextBoxFor(m => m.Prop)生成的,而我的元素是在部分生成的 - 這是問題開始的地方。如果我選擇Html.TextBoxFor(m => m.Value),所有我的元素文本框將具有相同的名稱/ ID,因此我也嘗試使用Html.TextBox(Model.Id)生成唯一的ID /名稱,但仍然沒有驗證屬性。
所以,有沒有辦法讓我的參議員工作 - 我不介意重寫一下,但我真的很喜歡FluentValidation爲我寫我的HTML。
我的備用解決方案是讓我自己的Html幫助器生成帶有屬性的正確Html,但這會吸引我認爲,因爲當新版本/補丁發佈到FluentValidation時,我將不得不更新這些幫助器, jQuery的驗證或兩者之間的MVC鏈接。
謝謝!這是有效的,應該被標記爲答案。 – JustinP8 2011-04-22 17:25:18
此外,如果循環後有輸入,請不要忘記重置'ViewData.TemplateInfo.HtmlFieldPrefix =「''。 – JustinP8 2011-04-22 17:39:27
@ JustinP8,@counsellorben,@Per:我有同樣的問題,但是這並沒有解決它。我爲我的嵌套集合使用EditorTemplates,並且所有'input'標籤的'id'屬性都已經用適當的/等價的「Elements [0]」作爲前綴。 'ViewData.TemplateInfo.HtmlFieldPrefix'很方便知道,但對我來說不是問題。 @Per提到'data-val,data-required等屬性缺失'。我注意到了同樣的事情。 – tkerwood 2011-06-09 07:52:33