20

のモデル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と、オブジェクトのプロパティがアドレスを渡したことがわかりますが、「ページ」パラメーターを追加できません。

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 を使用している場合 (Razor が発明される 4 年前に OP が質問したことは承知していますが、これを見つけた人は使用している可能性があります)。

インライン @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や OP の場合は などの追加のアイテムを渡す必要がありますpage

于 2014-04-02T19:31:36.637 に答える