2

cshtml ページに次の foreach があり、各モデル アイテムを反復処理できます。

@foreach (var item in Model)
{
    <div class="date">
        @item.pubDate
    </div>
    <a href="@Url.RouteUrl("Details", new { action = "Details", controller = "News", id = item.id, title = item.title })">
        <img src="some route" alt="some alt" />                 
    </a>
}

今では正常に動作しており、 foreach ループ内の各要素には次のような URL があります

http://something.com/News/Details/1/first-title
http://something.com/News/Details/2/second-title

次のようなものでURLを作成することが可能です

http://something.com/News/Details/first-title
http://something.com/News/Details/second-title

しかし、私はまだidパラメータをコントローラに送信できますか?

前もって感謝します

4

2 に答える 2

1

別のルートを追加します。

routes.MapRoute(
    name: "NewsTitleRoute",
    url: "News/Details/{id}/{title}",
    defaults: new { 
        controller = "News", 
        action = "Details", 
        id = UrlParameter.Optional, 
        title = UrlParameter.Optional 
        }
);

コントローラーで、オプションとして 2 つのパラメーターを使用して、次のように details メソッドを宣言します。

public ActionResult Details(int? id, string title="")
{
}

そのルート構成とDetails方法は、次の場合に機能します。

于 2013-05-01T01:51:12.763 に答える
0

パラメータにtitleプロパティを渡すだけです。id

@Url.RouteUrl("Details",
              new { action = "Details", controller = "News", id = item.title})

次にid、アクション メソッドでパラメーターのタイプを文字列として設定します。

public ActionResult Details(string id)

または、von-v の回答のようにカスタム ルートを作成することもできます。デフォルトルートの上にあることを確認してください。

于 2013-05-01T01:51:04.790 に答える