2012-08-16 82 views
1

我有一個模型類[MetadataType(typeof(ThisEntityMetaData))]]和[Bind(...)]註釋我需要驗證回發組合屬性值和一個路由參數(viewType)。viewType不是實體類的屬性。到目前爲止,我只能在action的[post]中做這個驗證。我想在實體類或者ThisEntityMetaData類。我該怎麼辦呢?謝謝。在[MetadatType(typeof(myClass)]中驗證多字段

[HttpPost] 
    [ActionName("Create")] 
    [AcceptParameter(Name = "Save", Value = "Save")] 
    [ValidateInput(false)] 
    public ActionResult Create(int id, thisViewModel newViewModel, 
     string cancel, enumViewType viewType) 
    { 
     /* code omitted */ 

     switch(viewType) 
     { 
     case enumViewType.OutAndNoReturn: 
     case enumViewType.OutAndReturn: 
      if(!thisEntity.Source.HasValue || !thisEntity.Reason.HasValue) 
       ViewData["Message"] = "Source, Reason are required."; 
      break; 
     case enumViewType.DirectOut: 
     case enumViewType.IndirectOut: 
      if ((!thisEntity.Source.HasValue || !thisEntity.Reason.HasValue || 
       !thisEntity.Desired.HasValue)) 
      { 
       thisEntity.ShowOutBlock = true; 
       ViewData["Message"] = "Source, Reason, Desired are required."; 
       return View(thisEntity); 
      } 
      break; 
     } 

     /* code omitted */ 
    } 

回答

2

的viewType不是實體類的屬性。

你可以使用一個真正的視圖模式,而不是東西,你有一個名爲視圖模型但實際上是不是在所有視圖模型:

[HttpPost] 
[ActionName("Create")] 
[AcceptParameter(Name = "Save", Value = "Save")] 
[ValidateInput(false)] 
public ActionResult Create(thisViewModel newViewModel) 
{ 
    ... 
} 

其中thisViewModel顯然包含了你需要的一切:

[MetadataType(typeof(ThisEntityMetaData))] 
public class thisViewModel 
{ 
    public int Id { get; set; } 
    public string Cancel { get; set; } 
    public enumViewType ViewType { get; set; } 

    ... 
} 

現在在你的ThisEntityMetaData裏面,可以隨意在這個視圖模型中驗證你想要的任何東西。