gpt4 book ai didi

asp.net-mvc - 将参数绑定(bind)到复杂类型

转载 作者:行者123 更新时间:2023-12-04 08:02:01 24 4
gpt4 key购买 nike

我有一个导航栏,有几个链接,如下所示:
<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 那就太好了在自定义模型绑定(bind)器中,而不是在 Controller 中初始化它......所以我仍然想使用链接(菜单项),但这次, CustomModelBinder将我的参数 2 绑定(bind)到 ComplexVM : 它需要从 MyCache 中查找id = 2 的部门名称并初始化 ComplexVM ,然后 ComplexVM将传递给此操作方法:
public ActionResult Browse(ComplexVM complexVM)
{
return View(complexVM);
}

我想在不回发的情况下点击上述 Controller ,因为我的导航栏中有很多菜单项链接......不确定这是否可能?或者如果这甚至是一个好主意?

我看过 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) });

最佳答案

我可以通过一点改变和一个技巧来实现这一点

<a href="MyController/Browse?id=1">MenuItem1</a>

Controller Action
public ActionResult Browse(ComplexVM complexVM)
{
return View(complexVM);
}

查看模型
public class ComplexVM
{
public int DepartmentId { get; set; }
public string DepartmentName { get; set; }
public ComplexVM()
{
this.DepartmentId = System.Convert.ToInt32(HttpContext.Current.Request("id").ToString);
this.DepartmentName = "Your name from cache"; // Get name from your cache
}
}

这是不使用模型绑定(bind)器。技巧可能会有所帮助。

关于asp.net-mvc - 将参数绑定(bind)到复杂类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53718955/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com