加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 为什么需要为Html.Action定义的路由?

发布时间:2020-12-16 04:29:21 所属栏目:asp.Net 来源:网络整理
导读:我用2个控制器,HomeController和OtherController创建了一个空的ASP.NET MVC 3应用程序. HomeController.cs看起来像这样: public class HomeController : Controller{ public ActionResult Index() { return View(); }} Index.cshtml看起来像这样: @Html.Ac
我用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并为你点击它一样公平.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读