2017-07-17 81 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); 
}