2つのコントローラがあるHomeController
とOtherController
の空のASP.NET MVC 3アプリケーションを作成しました。なぜHtml.Actionに定義されたルートが必要ですか?
HomeController.cs次のようになります。
@Html.Action("Index", "Other")
そして、もちろん、Othercontroller.cs:これまでのところ
public class OtherController : Controller
{
[ChildActionOnly]
public ActionResult Index()
{
return Content("OK!");
}
}
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
}
Index.cshtmlは次のようになります、 とても良い。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
とNOルートがOtherController
と一致しないように、私は、それをくしゃくしゃ:私はGlobal.asax.csからデフォルトRegisterRoutes
を取る、私はアプリを実行し、それはすべてが今OK!
である私に語りました:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute("Default", "", new { controller = "Home", action = "Index" });
}
さて、私はページを実行すると、それはこのエラーメッセージでクラッシュ:
System.InvalidOperationException: No route in the route table matches the supplied values.
Source Error:
Line 1: @Html.Action("Index", "Other")
.Action
への呼び出しでコントローラ名とアクション名を指定しました。 URLは生成されておらず、要求も行われていません。 ルーティングが関与する必要があるのはなぜですか?
感謝君は。どの経路を使用するかに影響を与える過負荷の特定の例を挙げると役立ちます。あなたは単純なものを考えることができますか? –
ここの自宅(ヤム、ワイン)の遅い時間に、最初に気になるのはあなたのルート値辞書のエリアを使用することでしょう。ルートハンドラがなければ、MVCはコントローラを探すネームスペースをどのように知るか、それがアクションのパラメータであったかどうかを知ることができます。 - > @ Html.Action( "Action"、 "Controller"、new {area = "Admin"})。また、名前付きルートは、ルートの名前を渡すだけで、名前付きルート定義で定義できるので、コントローラ、アクションパラメータを渡す必要はありません。 – Tommy