2016-07-05 61 views
0

所以我有兩個單獨的模型:ModelAModelB。我也有一個ViewModel:TheViewModelTheViewModel包含ModelA以及ModelB的實例。如何使用ASP.NET MVC驗證單個ViewModel中的多個獨立模型?

ModelAModelB有它們各自的屬性和[Required] s。但是,當我發佈表單時,TheViewModel僅驗證ModelA並忽略ModelB

如何使用一個ViewModel驗證多個模型?

一些代碼片段:

MODELA

public class ModelA 
{ 
    [Required] 
    public string TheID { get; set; } 
    public string TheName { get; set; } 
} 

ModelB

public class ModelB 
{ 
    [Required] 
    public string TheCode { get; set; } 
    public string TheType { get; set; } 
} 

TheViewModel

public class TheViewModel 
{ 
    public ModelA ModelAExample { get; set; } 
    public ModelB ModelBExample { get; set; } 
} 

控制器

[HttpPost] 
[ValidateAntiForgeryToken] 
public IActionResult Create(TheViewModel vm) 
{ 
    if (ModelState.IsValid) 
    { 
     return RedirectToAction("Index", "Home"); 
    } 

    return View(vm.ModelAExample, vm.ModelBExample)); 
} 

的ModelState中只會驗證如果ModelATheID屬性是有效的,而不是在TheCodeModelB

+1

你還應該包括'[必需]'在類'TheViewModel'兩個屬性。當你說'ModelState.IsValid'在不應該的時候返回true時,'TheCode'的值是什麼?最後,您應該將變量'vm'傳遞給'View'方法,因爲View需要1個模型而不是多個模型。 – Igor

回答

1

你只需要通過虛擬機只能查看。模型綁定一個模型發生only.if要傳遞多個模型在這種情況下揮霍使用像ViewBag等動態對象.....

return View(vm); 

然後,你可以綁定視圖模型有了你View.The代碼你給出的將不會運行返回查看(vm.ModelAExample,vm.ModelBExample ));這裏就會拋出語法錯誤

Best Practices ViewModel Validation in ASP.NET MVC

1

這不會編譯:

return View(vm.ModelAExample, vm.ModelBExample)); 

如果使用VM作爲視圖模型,驗證是正確的:

return View(vm) 
相關問題