MVC可以定位空白+参数

时间:2016-09-06 20:39:35

标签: html asp.net-mvc razor

见:

@Html.ActionLink("link", "Func", new { controller = "MyControl" }, new { target = "_blank" })

它完成了它所做的事情,但如果我需要我的模型,因为这里是我的函数的标题:

public ActionResult Func(model_1 m)
{ }

我要做的是打开一个新标签,并将我的模型带到这个新标签页......我该怎么办?

1 个答案:

答案 0 :(得分:1)

Html.ActionLink辅助方法存在重载,允许您传递路由值。

@Html.ActionLink("link", "Func", "MyControl" ,new { EmpId=1, EmpCode="E23" ,Age =23},
                                                                  new { target = "_blank" })

这将基本上生成一个带有href值的锚标签,其中查询字符串是根据您提供的路线值形成的。

<a href="/Mycontrol/Func?EmpId=23&EmpCode=E23&Age=23">link</a>

假设您有一个具有这两个属性的类被用作操作方法的参数

public class EmployeeVm
{
   public int EmpId { set;get;}
   public string EmpCode { set;get;}
   public int Age{ set;get;}
}

,这被用作动作方法参数的类型

public ActoinResult Func(EmployeeVm model)
{
  // To do : Return something
}

模型绑定器将能够将查询字符串值映射到参数对象的属性。

但请记住,querystring的数据量有限。同样上述方法适用于精益平面视图模型类。它不适用于复杂的viewmodel类,其中属性是其他类的其他类/集合。

在这种情况下,最佳解决方案是传递ID的唯一ID /组合,并使用它来在第二个操作方法中重建模型/视图模型。

@Html.ActionLink("link", "Func", "MyControl" ,new { EmpId=1}, new { target = "_blank" })

并在您的操作方法中

public ActionResult Func(int empId)
{
  // to do  : Using empIdvalue, Get the View model /Model data
  // Ex : EmployeeVm emp = SomeService.GetEmployeeFromId(empId)

}

假设SomeService.GetEmployeeFromId接受employeeId并返回EmployeeVm的对象。该方法可以查询您的db表以获取传入的id的相应员工记录,并从该数据构建EmployeeVm对象。