2014-10-08 57 views
0

我有一個視圖模型,其中我有一系列模型,因爲我需要在同一頁面中顯示並獲取多個模型。例如驗證模型中的單個對象

class ViewModel { 
    public RegisteratioModel Rm {get; set;} 
    public LoginModel LM{get; set;} 
} 
在每一個

這些模型,我用於驗證數據的註釋,例如

public RegistrationModel { 
    [Required] 
    public String Username {get; set;} 
} 

當我嘗試使用來驗證我的視圖模型的單一對象

tryValidate(viewModel.Rm) 
if (ModelState.isValid) {} 

ModelState總是無效,我認爲這是因爲其他對象也正在驗證。我如何才能驗證我的模型中的單個對象?

+1

什麼是嵌入模型的目的是什麼?如果你沒有驗證所有這些(除了一個),那麼它們是用於顯示的目的?請記住,View-Model-Controller中的模型是視圖模型,而不是數據模型。因此,您可以爲單個視圖定義視圖模型,該模型將包含視圖呈現和按預期行爲所需的所有數據。所以你不應該嵌入其他視圖模型被單個視圖顯示。 – 2014-10-08 23:50:29

+0

@KeithPayne:如果我需要在我看來有多個模型,我可以製作部分視圖,但這是很多工作!有時我需要一個模型和一個模型列表。 View.Bag在我的開放中並不是好的方法 – JAX 2014-10-08 23:57:27

回答

0

它並不完全驗證單個屬性,在幕後它將驗證所有屬性,但是它將返回由屬性名稱指定的屬性,並且如果存在任何其他屬性的問題,它們不會被添加到模型狀態。

ModelMetadata metadata = ModelMetadataProviders.Current.GetMetadataForType(() => model, model.GetType()); 

string propertyName = ""; 

ModelValidationResult result = ModelValidator.GetModelValidator(metadata, ControllerContext) 
              .Validate(null) 
              .First(m => m.MemberName == propertyName); 

而且......這只是你的控制器內的工作...