我创建了一个空的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