asp.net-mvc – 为什么需要为Html.Action定义的路由?
我用2个控制器,HomeController和OtherController创建了一个空的ASP.NET MVC 3应用程序.
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!"); } } 到现在为止还挺好.我运行应用程序,它告诉我一切正常! 现在,我从Global.asax.cs获取默认的RegisterRoutes: 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: 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,也没有请求.为什么路由甚至需要参与? 解决方法
我认为这篇博文将帮助您了解更多:
http://blogs.charteris.com/blogs/gopalk/archive/2009/01/20/how-does-asp-net-mvc-work.aspx. 本质上,路由涉及确定哪个控制器“启动”以处理请求以及根据您发送的参数调用适当的操作,MVCRouteHandler使用这些参数做出决定.只是因为你告诉它你的动作中的哪个控制器没有让它神奇地忽略路由表,直接进入那个控制器类并绕过后端发生的所有其他MVC优点.请记住,这些@HTML.Action方法可能会占用大量的重载,这可能会影响路由表中的哪个路由(例如,考虑URL结构). MVC路径不是静态内容,因此必须通过URLRoutingModule进行解析,URLRoutingModule使用路由表来决定要做什么.由于您没有匹配的路线 – 您会收到错误消息. 编辑 在我的诽谤中,我实际上没有说明你的最后陈述.你是对的,没有生成URL,但是生成了对应用程序的请求. HTML.Action仍将使用路由来确定要使用的控制器,操作,区域和参数.我认为用简单的术语说它就像生成一个ActionLink并为你点击它一样公平. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 我对Html.TextBoxFor的工作原理有什么误解
- 如何删除IIS自定义标头像X-Powered-By:ASP.NET从响应?
- asp.net – 如何绕过特定网址的“angular-in-memory-web-ap
- 最好的TinyMce编辑器图像管理器/文件上传为Asp.net Mvc
- 在ASP.NET Identity 2.0.0-beta1中禁用双因素身份验证
- .net – MVC3 HttpPostedFileBase首先上传没有数据,但后来做
- asp.net-mvc – 为什么人们在MVC中使用Web API控制器
- asp.net-mvc – ModelState.AddModelError未显示任何消息
- asp.net-web-api – WebAPI 2属性路由启用会话状态
- 使用ASP.NET 5中的默认DI容器一次注册所有服务,类似于Autof