我使用C#MVC 4 serversided。 Gerenel網站的目的是獲取一些輸入的文本信息以及用戶提交的文件。MVC 4自動模型驗證stum on ViewModel與嵌套ViewModel
因此,我使用一個ViewModel,它是保存有關用戶輸入的文本信息(稱爲FileInformationViewModel)的信息的「父級」ViewModel。這個「父」ViewModel包含另一個「子」ViewModel,我們稱之爲FileUploadViewModel。
這些視圖模型的每一個都是從IValidateObject派生的,並擁有它們的自定義驗證函數,只驗證模型的當前屬性。這意味着「父」ViewModel不會對「子」ViewModel進行任何驗證,因爲「子」ViewModel擁有它自己特定的驗證功能。
「孩子」ViewModel將通過MVC 4提供的自動模型驗證進行驗證,ModelState將按預期設置。之後,通過MVC模型綁定邏輯將「子」ViewModel成功綁定到「父」ViewModel。 如果驗證失敗的「孩子」ViewModel「父」ViewModel的驗證功能將不再處理,但我想處理模型綁定自動驗證兩個驗證。有什麼辦法來實現這一點,或者是唯一可以手動驗證我的控制器上的ViewModels的方法嗎?
爲了說明我的建築,這裏的 「父」 視圖模型:
public class FileInformationViewModel : IValidatableObject
{
public FileInformationViewModel()
{
ViewModel1 = new FileUploadViewModel();
}
public FileUploadViewModel ViewModel1 { get; set; }
public string InputFieldToBeSet { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (!string.IsNullOrWhiteSpace(InputFieldToBeSet))
{
var result = new ValidationResult("Enter some information, please!", new[] { nameof(InputFieldToBeSet) });
yield return result;
}
}
感謝您的快速回答。事實上,我想知道如果我可以通過創建自己的數據註釋,如果需要。但是在驗證功能中我需要做一些更復雜的驗證。原來,我從SubModel中移除了'IValidationObject',並將錯誤返回給父模型,而是在prent級別添加了childs錯誤。不過,我認爲你的建議在大多數情況下是最合適的。 – doodles975