20

的模型SearchResults.aspx是一个实例PersonSearch;当一个新页面的请求到达(一个 GET 请求)时,action 方法应该接受它并计算新的结果。

[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我可以看到对象属性传递了地址,但我不能添加“页面”参数。

4

5 回答 5

26

它认为创建另一个具有正确值的对象会更好,而不是使用(并可能改变当前的路由值):

<%=Html.ActionLink("Next Page >", "SearchResults", new {
    search = this.Model,
    page = 1 //or whatever
}) %>
于 2009-11-27T18:34:46.553 回答
6

Scott Guthrie 的这篇博文帮助我理解了 URL 路由:ASP.NET MVC 框架(第 2 部分):URL 路由

在此处输入图像描述 在此处输入图像描述

我喜欢他包含测试用例! 在此处输入图像描述

于 2011-10-05T16:21:50.027 回答
3

您需要覆盖 ToString()。

于 2010-01-26T17:28:44.023 回答
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 传递,它会很好地工作,但您需要传递其他项目,例如ControllerArea或 OPs case page

于 2014-04-02T19:31:36.637 回答
1

您需要使用 RouteLink 而不是 ActionLink。你的代码应该是这样的

@Html.RouteLink("Next", new {controller = "SearchResults", action = "Index", search=samevalue, page=1 }) 
于 2018-01-18T08:24:54.337 回答