ASP.NET MVC 路由运行不正常
ASP.NET MVC Routing not working well
我的 ASP.NET MVC 应用程序中有些路由问题让我有些受阻。
让我们假设我有 2 个控制器,它们是:
- 任务列表控制器
- 任务控制器
我不确定这是否矫枉过正,但我的目标是 URL 如下:
对于任务列表控制器:
- 本地主机:xxxx/tasklist/Create
- 本地主机:xxxx/tasklist/
- 本地主机:xxxx/tasklist/详细信息/1
- localhost:xxxx/tasklist/编辑/1
对于任务控制器:
- localhost:xxxx/tasklist/1/任务/创建
- 本地主机:xxxx/tasklist/1/任务
- localhost:xxxx/tasklist/1/任务/详细信息/11
- localhost:xxxx/tasklist/1/任务/编辑/11
我的路由设置如下:
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 时,我收到 "Resource cannot be found" 错误:
http://localhost:xxxx/tasklist/1/Task
我必须像下面这样输入单词 "Index" 才能使该页面正常工作...
http://localhost:xxxx/tasklist/1/Task/Index
上面url后面的方法签名是...
public class TaskController : Controller
{
// GET: Task
public ActionResult Index(int tasklistid)
{
//Some code here....
}
}
有什么想法我错了吗?感谢任何建议。
提前致谢。
所以在考虑了 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}”替换为 'Task'
这实际上是控制器的名称。
我希望这是正确的做法。
干杯
我的 ASP.NET MVC 应用程序中有些路由问题让我有些受阻。
让我们假设我有 2 个控制器,它们是:
- 任务列表控制器
- 任务控制器
我不确定这是否矫枉过正,但我的目标是 URL 如下:
对于任务列表控制器:
- 本地主机:xxxx/tasklist/Create
- 本地主机:xxxx/tasklist/
- 本地主机:xxxx/tasklist/详细信息/1
- localhost:xxxx/tasklist/编辑/1
对于任务控制器:
- localhost:xxxx/tasklist/1/任务/创建
- 本地主机:xxxx/tasklist/1/任务
- localhost:xxxx/tasklist/1/任务/详细信息/11
- localhost:xxxx/tasklist/1/任务/编辑/11
我的路由设置如下:
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 时,我收到 "Resource cannot be found" 错误:
http://localhost:xxxx/tasklist/1/Task
我必须像下面这样输入单词 "Index" 才能使该页面正常工作... http://localhost:xxxx/tasklist/1/Task/Index
上面url后面的方法签名是...
public class TaskController : Controller
{
// GET: Task
public ActionResult Index(int tasklistid)
{
//Some code here....
}
}
有什么想法我错了吗?感谢任何建议。
提前致谢。
所以在考虑了 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}”替换为 'Task' 这实际上是控制器的名称。
我希望这是正确的做法。
干杯