繁体   English   中英

ASP.NET MVC路由无法正常工作

[英]ASP.NET MVC Routing not working well

我有点被ASP.NET MVC应用程序中的某些路由问题所阻塞。

让我们假设我有2个控制器:

  1. TaskList控制器
  2. 任务控制器

我不知道这是否是矫kill过正,但我​​的目标是使URL如下:

对于TaskList控制器:

  • 本地主机:xxxx /任务列表/创建
  • 本地主机:xxxx /任务列表/
  • 本地主机:xxxx /任务列表/详细信息/ 1
  • 本地主机:xxxx /任务列表/编辑/ 1

对于任务控制器:

  • 本地主机:xxxx / tasklist / 1 /任务/创建
  • 本地主机:xxxx / tasklist / 1 /任务
  • 本地主机:xxxx / tasklist / 1 / Task / Details / 11
  • 本地主机:xxxx / tasklist / 1 / Task / Edit / 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时,出现“找不到资源”错误:

http:// localhost:xxxx / tasklist / 1 /任务

为了使该页面正常工作,我必须像下面那样键入“索引”一词... http:// localhost:xxxx / tasklist / 1 / Task / Index

上面网址后面的方法签名是...

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" }
        );
    }

基本上执行以下操作:

  • 将路由调整为以下顺序:

    1. TaskRoute
    2. TaskListRoute
    3. 默认
  • 在TaskRoute中,将“ {controller}”替换为“ Task”之类的文字,实际上是控制器的名称。

我希望这是正确的做法。

干杯

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM