SearchResults.aspx
的模型是PersonSearch
的一个实例;当新页面的请求到达时(GET请求),操作方法应该接受并计算新结果。
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult SearchResults(PersonSearch search, int? page)
{
ViewData["Results"] = new PaginatedList<Person>(_searchService.FindPersons(search), page ?? 0, 1);
return View("SearchResults", search);
}
然后我必须生成上一个/下一个链接:
<%= Html.ActionLink("Next Page >", "SearchResults", routeValues) %>
如果我使用routeValues = ViewData.Model
我可以看到对象属性传递了地址,但我无法添加“page”参数。
答案 0 :(得分:24)
它认为最好使用正确的值创建另一个对象,而不是使用(并可能改变当前的路由值):
<%=Html.ActionLink("Next Page >", "SearchResults", new {
search = this.Model,
page = 1 //or whatever
}) %>
答案 1 :(得分:6)
答案 2 :(得分:3)
您需要覆盖ToString()。
答案 3 :(得分:2)
如果你正在使用Razor(我发现OP在四年前发明Razor之前就已经问过了,但人们发现它可能正在使用它)。
我能够使用内联的@helper方法获得一些工作。
@helper RunnerLink(PersonSearch model, int page)
{
var routeParms =new RouteValueDictionary(model.GetType().GetProperties().ToDictionary(p => p.Name, p => p.GetValue(model, null)));
routeParms.Add("page", page.ToString());
routeParms.Add("Controller", "Property");
@Html.ActionLink("Search", "Index", routeParms)
}
用法很简单 -
@RunnerLink(myPersonSearchInstance, 1)
它不是最优雅的解决方案,但如果您想要将对象作为routeValue传递,但是您需要传递其他项目,例如Controller
,{{1} }或在OP案例中Area
。
答案 4 :(得分:1)
您需要使用RouteLink而不是ActionLink。你的代码看起来应该是这样的
@Html.RouteLink("Next", new {controller = "SearchResults", action = "Index", search=samevalue, page=1 })