【发布时间】:2019-05-12 03:17:58
【问题描述】:
我有一个导航栏,有几个链接,像这样:
<a href="MyController/Browse/2">MenuItem1</a>
这个请求会命中我的操作方法:
public ActionResult Browse(int departmentId)
{
var complexVM = MyCache.GetComplexVM(departmentId);
return View(complexVM);
}
这是我的ComplexVM:
public class ComplexVM
{
public int DepartmentId { get; set; }
public string DepartmentName { get; set; }
}
MyCache,是一个部门的静态列表,我保存在内存中,所以当用户传入DepartmentId时,我不需要从数据库中获取相应的DepartmentName。
这工作正常...但是如果我能以某种方式在自定义模型绑定器中初始化ComplexVM,而不是在控制器中初始化它,那就太好了...所以我仍然想使用链接(菜单项) ,但这次CustomModelBinder将我的参数2绑定到ComplexVM:它需要从MyCache中查找id = 2的部门名称并初始化ComplexVM,然后ComplexVM将被传递到这个动作方法:
public ActionResult Browse(ComplexVM complexVM)
{
return View(complexVM);
}
我想在不回发的情况下点击上述控制器,因为我的导航栏中有很多菜单项链接......不确定这是否可能?或者如果这甚至是一个好主意?
我见过this link,它描述了我想要什么...但我不确定路由将如何工作...即路由id:2 => ComplexVM
或者可以在RouteConfig 中执行此操作,如下所示:
routes.MapRoute(
name: "Browse",
url: "{controller}/Browse/{departmentId}",
// this does not compile, just want to explain what I want...
defaults: new { action = "Browse", new ComplexVM(departmentId) });
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-5 asp.net-mvc-routing model-binding