2017-07-17 116 views
0

我有一個管理門戶,我嘗試創建,並且在其中具有特定於給定客戶端的自定義端點。在MVC中動態綁定模型

因此,例如,對於一個客戶端,管理員/我們的員工頁面將在內部重定向到admin/team-member頁面,因爲我們的員工是遵循團隊成員模板的頁面。但是,客戶可以選擇名爲admin/our-staff的端點,因此無法靜態執行此操作。

在我RouteConfig.cs我:

  routes.MapRoute(
      "adminPageRoute", 
      "admin/pages/{page}/{action2}", 
      new { controller = "Page", action = "Index", page = "", action2 = "" } 
      ); 

然後在我的PageController.cs我:

public ActionResult Index(string page, string action2) 
{ 
    var pageData = ... 

    // Grabbing from database a map between page variable and PageType 
    // depending on Session's User ID 

    if (pageData.PageType == 1) 
    { 
     return TeamMembers(); 
    } 

    else return View("Index"); 

} 

public ActionResult TeamMembers() 
{ 
    TeamMemberModel model = ???; 
} 

的問題是,我該如何生成這種模式?通常我可以將TeamMemberModel參數作爲參數放在action方法中,MVC會自動爲我填充。但是,因爲它越來越直接從另一種方法叫,我得到一個編譯錯誤很明顯,如果我嘗試這樣:

public ActionResult TeamMembers(TeamMemberModel model) 
{ 
} 

我可以手動映射來自請求的HttpContext的這一個模式,但我真的不想做對於我計劃的所有模型。有什麼辦法可以動態地觸發綁定,並在沒有控制器方法的情況下形成模型的新實例?任何幫助極大讚賞

編輯: 它最終變得簡單。這裏發佈的答案供將來參考使用

public ActionResult TeamMembers() 
{ 
    TeamMemberModel model = new TeamMemberModel(); 
    this.UpdateModel<TeamMemberModel>(model); 
} 
+0

注意視圖模型,你有因爲它不是'static'應該首先初始化類:'TeamMemberModel模型=新TeamMemberModel();'。在控制器操作方法中使用時,編譯器錯誤可能與未初始化類的使用有關。 –

+0

感謝您的迴應,但也許我不清楚,問題不在於我收到編譯器錯誤,而是我不知道如何從HTTP Request對象獲取模型。我現在正在探索可能有效的UpdateModel選項 – Dan

回答

0

它最終變得簡單。答案這裏發佈以供將來參考

public ActionResult TeamMembers() 
{ 
    TeamMemberModel model = new TeamMemberModel(); 
    this.UpdateModel<TeamMemberModel>(model); 
}