1

私は MVC を初めて使用し、それを使用して新しいサイトをセットアップしようとしています。SEO の理由から、ページの URL を「Recruiter/4359/John_Smith」または基本的に{controller}/{id}/{name}. コードビハインドでURLを作成すると、うまくいきます...

//r is a recruiter object that is part of the results for the view

r.Summary = searchResult.Summary + "... <a href=\"/Recruiter/" + r.Id + "/" + r.FirstName + "_" + r.LastName + "\">Read More</a>"

しかし、ビューで検索結果のコレクションを使用してそれらを繰り返し処理しているときに、同じページへの別のリンクを作成しようとしています<%=Html.ActionLink<RecruiterController>(x => x.Detail((int)r.Id), r.RecruiterName)%> が、それは機能しません。ビューでそのコードを使用すると、/Recruiter/Detail/4359 の形式の URL が表示されますルートが将来変更された場合、それは自動的に機能します。残念ながら、この場合、彼はそれを行う方法がわかりませんでした。だから、私の問題は...

  1. ビューでHtml.ActionLinkを機能させて、必要なURLを作成するにはどうすればよいですか(上記のr.Summaryのように)?
  2. 上記のようにリンクをハードコーディングする代わりに、コントローラーで Html.ActionLink を使用するにはどうすればよいですか?
4

2 に答える 2

1

同僚が言うように、ActionLinkメソッドを使用してリンクを書き出すことをお勧めします。そうすれば、リンクは常にルートと一致します。

現在の場合、メソッドを書き出す理由は、デフォルトのルーティングに基づいているためです。これを修正するには、Global.asaxのデフォルトルートの上に別のルートを追加します。次のように、必要な形式を指定する必要があります。

routes.MapRoute(
    "Recruiter",
    "Recruiter/{id}/{name}",
    new { controller = "Recruiter", action = "Details" }
);

MVCは、登録されている順序でルートを処理するため、これをデフォルトの前に置くと、代わりにルートが使用されます。

編集:

このルートデバッグツールが役立つ場合があります。

于 2009-10-12T13:39:35.083 に答える
1

このブログ投稿に出会い、正しい方向に進みました。

http://www.chadmoran.com/blog/2009/4/23/optimizing-url-generation-in-aspnet-mvc-part-2.html

于 2009-10-12T14:36:08.633 に答える