见:
@Html.ActionLink("link", "Func", new { controller = "MyControl" }, new { target = "_blank" })
它完成了它所做的事情,但如果我需要我的模型,因为这里是我的函数的标题:
public ActionResult Func(model_1 m)
{ }
我要做的是打开一个新标签,并将我的模型带到这个新标签页......我该怎么办?
答案 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对象。