我創建了一個空的ASP.NET MVC 3應用程序,帶有2個控制器,HomeController
和OtherController
。爲什麼你需要一個爲Html.Action定義的路由?
HomeController.cs看起來是這樣的:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
}
Index.cshtml看起來是這樣的:
@Html.Action("Index", "Other")
,當然,Othercontroller.cs:
public class OtherController : Controller
{
[ChildActionOnly]
public ActionResult Index()
{
return Content("OK!");
}
}
到目前爲止, 太好了。我運行應用程序,它告訴我一切都OK!
現在,我把默認RegisterRoutes
從Global.asax.cs中:
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
);
}
我揉碎了起來,所以沒有路由匹配OtherController
:
System.InvalidOperationException: No route in the route table matches the supplied values.
Source Error:
Line 1: @Html.Action("Index", "Other")
:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute("Default", "", new { controller = "Home", action = "Index" });
}
現在,當我運行的頁面,它與此錯誤消息崩潰
我在.Action
的調用中指定了控制器名稱和操作名稱。沒有URL正在生成,也沒有請求正在進行。 爲什麼路由甚至需要參與?
謝謝您。這可能有助於給出一個會影響使用哪條路線的重載示例。你能想到一個簡單的嗎? –
在這裏,在家裏的最後時刻(yum,wine),首先想到的就是在你的路線價值字典中使用一個區域。沒有路由處理程序,MVC如何知道要查找控制器的哪個名稱空間,或者它是否是操作的參數。 - > @ Html.Action(「Action」,「Controller」,new {area =「Admin」})。另外,命名路由可能是另一個例子,您只需傳遞路由的名稱,並且不一定需要傳遞控制器的操作參數,因爲它們可以在命名的路由定義中定義。 – Tommy