我在ASP.NET MVC应用程序中遇到了一些路由问题。
我们假设我有2个控制器:
我不确定这是否有点过分但我的目标是如下网址:
对于TaskList Controller:
对于任务控制器:
我已按如下方式设置路由:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}",
defaults: new { controller = "Home", action = "Index" }
);
routes.MapRoute(
name: "TaskListRoute",
url: "TaskList/{action}/{tasklistid}",
defaults: new { controller = "TaskList", action = "Index", tasklistid = UrlParameter.Optional }
);
routes.MapRoute(
name: "TaskRoute",
url: "TaskList/{tasklistid}/{controller}/{action}/{taskid}",
defaults: new { tasklistid = UrlParameter.Optional, controller = "Task", action = "Index", taskid = UrlParameter.Optional }
);
在调试应用程序时,我能够毫无问题地浏览TaskList控制器,但是当我在任务控制器上点击以下URL时,我得到了一个"无法找到资源"错误:
http://localhost:xxxx/tasklist/1/Task
我必须输入单词" Index"如下所示,以便该页面工作... http://localhost:xxxx/tasklist/1/Task/Index
上述网址背后的方法签名是......
public class TaskController : Controller
{
// GET: Task
public ActionResult Index(int tasklistid)
{
//Some code here....
}
}
我错的任何想法?感谢任何建议。
提前致谢。
答案 0 :(得分:0)
因此,在考虑了Nkosi的评论和NightOwl888的文章后,我所要做的就是将路由修改为如下所示:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "TaskRoute",
url: "TaskList/{tasklistid}/Task/{action}/{taskid}",
defaults: new { controller = "Task", action = "Index", taskid = UrlParameter.Optional }
);
routes.MapRoute(
name: "TaskListRoute",
url: "TaskList/{action}/{tasklistid}",
defaults: new { controller = "TaskList", action = "Index", tasklistid = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}",
defaults: new { controller = "Home", action = "Index" }
);
}
基本上做了以下事情:
将路由调整为以下顺序:
在TaskRoute中,将“{controller}”替换为“任务”等文字 这实际上是控制器的名称。
我希望这是正确的做法。
干杯