【问题标题】:How do I create the correct route values for this ActionLink?如何为此 ActionLink 创建正确的路由值?
【发布时间】:2009-11-27 18:15:22
【问题描述】:

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

【问题讨论】:

    标签: c# asp.net-mvc actionlink routevalues


    【解决方案1】:

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

    <%=Html.ActionLink("Next Page >", "SearchResults", new {
        search = this.Model,
        page = 1 //or whatever
    }) %>
    

    【讨论】:

    • 我得到:SearchResults?search=RegistryManager.Models.PersonSearch&page=1
    • 不起作用...它传递类的名称,而不是对象属性对应的键/值对...
    【解决方案2】:

    Scott Guthrie 的这篇博文帮助我了解了 URL 路由:ASP.NET MVC Framework (Part 2): URL Routing

    我喜欢他包含测试用例!

    【讨论】:

      【解决方案3】:

      你需要重写 ToString()。

      【讨论】:

        【解决方案4】:

        如果您使用的是 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 情况下 @ 987654325@.

        【讨论】:

          【解决方案5】:

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

          @Html.RouteLink("Next", new {controller = "SearchResults", action = "Index", search=samevalue, page=1 }) 
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-09-20
            • 1970-01-01
            • 2016-03-03
            • 1970-01-01
            • 2011-06-09
            相关资源
            最近更新 更多