单击ActionLink后,我想传递一个模型和一个int到一个控制器.
@Html.ActionLink("Next","Lookup","User",new { m = Model.UserLookupviewmodel,page = Model.UserLookupviewmodel.curPage },null)
它不起作用,而是通过模型的空白实例,当使用新的时候,它将会预期.
@Html.ActionLink("Next",Model.UserLookupviewmodel,null)
工作.
调节器
[HttpGet] public ActionResult Lookup(UserLookupviewmodel m,int page = 0) { return this.DoLookup(m,page); }
查看模型
public class UserLookupviewmodel { public int curPage { get; set; } [Display(Name = "Forenames")] public string Forenames { get; set; } [Display(Name = "Surname")] public string Surname { get; set; } [Display(Name = "DOB")] public DateTime? DoB { get; set; } [Display(Name = "Post code")] public string Postcode { get; set; } }
解决方法
您不能使用ActionLink通过链接传递属性,但您可以执行以下操作来获得相同的行为.
<form action="/url/to/action" Method="GET"> <input type="hidden" name="Property" value="hello,world" /> <button type="submit">Go To User</button> </form>
如果您创建一个帮助程序来生成这些GET表单,那么您将能够像普通的链接按钮那样进行样式化.我唯一要提醒的是,页面上的所有表单都易于修改,因此我不会相信数据.当你到达你要去的地方时,我宁愿再次拉出数据.
创建搜索操作时,我使用上面的技术,并希望保留搜索记录并保持后退按钮的工作.
希望这可以帮助,
哈立德:)
附:
原因是这样的.
@Html.ActionLink("Next",null)
是因为ActionLink方法的参数列表被概括为一个对象,所以它将需要任何东西.它将对该对象执行的操作是将其传递给RouteValueDictionary,然后根据该对象的属性尝试创建一个querystring.