MVC ルーティングを把握するのに苦労しています。何度も読み返しましたが、まだあまり意味がありません。ルート「Teams/Summary?teamID=30」をマップして、ブラウザに「Teams/30」と表示しようとしています。これは私が現時点で持っているものですが、なぜ機能しないのか理解できません:
//Teams routes
routes.MapRoute(
"TeamsSummary",
"Teams/{teamID}",
new { controller = "Teams", action = "Index", teamID = UrlParameter.Optional }
);
「機能しない」とは、Web ページが読み込まれるが、ブラウザーのアドレス バーに「Teams?teamID=30」が表示されることを意味します。
このような単純なマッピングを実行するために何をする必要があるかを誰かが理解するのを手伝ってくれませんか? ちなみに、干渉すると思われる他のルートは設定しておらず、Global.asax.cs ファイルの既定のルートの前にリストされています。
このテーマに関する優れた記事やチュートリアルがあれば、それも役に立ちます。ありがとう。
編集: URLを手動で入力すると、ルートは正常に機能します。フォームを使用してコントローラーにポストバックすると、問題が発生するようになりました。
コントローラ:
public ActionResult Index(TeamsViewModel model)
{
if (model.teamID != null)
model.TeamSummary = new TeamSummaryViewModel(model.teamID);
return View(model);
}
意見:
@{
ViewBag.Title = "Teams";
}
@using (Html.BeginForm("Index","Teams",FormMethod.Get))
{
@Html.DropDownList("teamID", new SelectList(Model.Teams,"teamID","Name"))
<input type="submit" value="Filter"/>
}
@if (Model.TeamSummary != null)
{
Html.RenderPartial("_TeamSummary", Model.TeamSummary);
}
Edit2: 元のアクションを、以前のように概要ではなく、TeamsController のインデックスに変更しました。