因此,我有一個User
Model類。它有名單UnitViewModel
。MVC ModelState驗證複雜屬性列表
public class UserViewModel
{
[Required(ErrorMessage="FirstName")]
public string FirstName { get; set; }
[Required(ErrorMessage = "LastName")]
public string LastName { get; set; }
public List<UnitViewModel> DesiredUnits { get; set; }
}
public class UnitViewModel
{
public Guid? UnitID { get; set; }
[Required(ErrorMessage = "NAMEEE")]
public string Name { get; set; }
public bool Selected { get; set; }
}
當我嘗試創建新User
我張貼UserViewModel
從我的觀點。這裏我得到ModelState.IsValid
false
。這是因爲驗證還檢查UnitViewModel.Name
屬性爲空(並且這是正常的,因爲我創建了User
,並且我有checkbox
列表用於UnitViewModel
。用戶從現有的UnitViewModel
列表中選擇UnitViewModel
列表)。
我可以通過foreach循環以可怕的方式修復ModelState["DesiredUnits[0].UnitID"].Errors.Clear()
但我不會。
那麼,解決方案是什麼?如何禁用模型複雜屬性列表的驗證?
UPDATE
另一種解決方案,我目前使用的是要有HiddenFor(m=>m.Name)
在UnitViewModel
的編輯模板,但這種方法的缺點是:Name
是不必要的,當我已經有標籤的editortemplate。此外,如果我有更多必填字段,我將不得不爲每個字段提供相應的隱藏輸入。
你能渲染你的創建視圖的方式,你沒有任何字段鏈接的DesiredUnits屬性? Thant方式ListView的UnitViewModel將保持空,並沒有名稱驗證完成 –
我有'EditorTemplate'爲具有'UnitID'和'Name'的DesiredUnits'。當創建User時,我必須顯示它,因爲他們需要選擇所需的單位 – levi
嘗試使用可爲空的DesiredUnits,然後 – maztt