如何在MVC 5中不显示控制器名称的情况下从一个控制器操作方法路由到另一个控制器动作方法

本文关键字:控制器 一个 操作方法 路由 方法 另一个 情况下 MVC 显示 | 更新日期: 2023-09-27 18:15:49

我在Route.config中有两个不同的MapRoutes,如下所示。。。

routes.MapRoute(
    name: "Default",
    url: "{action}",
    defaults: new { controller = "Index",action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
    name: "SubjectRoute",
    url: "{action}", 
    defaults: new { controller = "Subjects", action = "Subjects" }
);

并且我的CCD_ 1在CCD_

@Html.ActionLink("SUBJECTS", "Subjects","Subjects", new { }, new { @class = "text" })

现在,当我单击Index操作方法中的SUBJECTS链接时,它应该转到SUBJECTS控制器中的SUBJECTS操作,而在URL中不显示控制器名称。

如何做到这一点?

如何在MVC 5中不显示控制器名称的情况下从一个控制器操作方法路由到另一个控制器动作方法

routes.MapRoute(
    name: "SubjectRoute",
    url: "Subjects", 
    defaults: new { controller = "Subjects", action = "Subjects" }
);
routes.MapRoute(
    name: "Default",
    url: "{action}/{id}",
    defaults: new { controller = "Index",action = "Index", id = UrlParameter.Optional }
);

有了以上内容,调用

@Html.ActionLink("SUBJECTS", "Subjects","Subjects", new { }, new { @class = "text" })

应生成

/Subjects

默认的、更通用的路由现在将捕获所有其他请求,并将它们路由到IndexController,CCD_4现在充当站点根/索引。

例如假设

public class IndexController : Controller {
    public ActionResult Index() {...}
    public ActionResult ContactUs() {...}
    public ActionResult About() {...}
}

基于上述控制器的可用路线是

/
/Index
/ContactUs
/About