【问题标题】:Custom route defaults to Index view自定义路由默认为索引视图
【发布时间】:2013-12-03 12:28:18
【问题描述】:

我在/Folders/Index 有一个观点。我希望能够导航到/Folders,并传递一个id,比如/Folders/123。所以我创建了这条路线:

routes.MapRoute(
    name: "",
    url: "Folders/{parentFolderId}",
    defaults: new { controller = "Folders", action = "Index",
        parentFolderId = UrlParameter.Optional }
);

这确实适用于上述情况。

问题是,如果我尝试导航到 /Folders/Create,它只会呈现我的 Index 视图。

如何更改路线才能正常工作?

我对路由系统很陌生,如果这是一个简单的答案,我深表歉意,但我认为这可以解决问题。另外,有人可以指导我找到一个很好的资源来学习如何自己做这些吗?

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing


    【解决方案1】:

    我认为您需要使用两条路线来解决这种情况 - 第一个匹配“/Folders/Id”,第二个解决“/Folders/Action”

    routes.MapRoute(
    name: "",
    url: "Folders/{parentFolderId}",
    defaults: new { controller = "Folders", action = "Index",
        parentFolderId = UrlParameter.Optional },
    constraints: new { parentFolderId = @"^[0-9]*$" });
    
    routes.MapRoute(
    name: "",
    url: "Folders/{action}",
    defaults: new { controller = "Folders", action = "Index"});
    

    编辑: 如果你想无限制地映射任何 parentFolderId 参数,那么你应该首先映射创建操作,然后再映射 parentFolderId。

    routes.MapRoute(
    name: "",
    url: "Folders/Create",
    defaults: new { controller = "Folders", action = "Create"});
    
    routes.MapRoute(
    name: "",
    url: "Folders/{parentFolderId}",
    defaults: new { controller = "Folders", action = "Index",
        parentFolderId = UrlParameter.Optional });
    

    【讨论】:

    • 第一条路线的约束很重要,因为第一条路线与“/Folders/Create”不匹配
    • 如果你想在没有任何约束的情况下匹配 parentFolderId,那么你应该把 Create action 路由映射放在 "Folders/{parentFolderId}" 路由映射之前。
    【解决方案2】:

    试试

    routes.MapRoute(
        name: "",
        url: "Folders/{action}",
        defaults: new { controller = "Folders", action = "Index" }
    );
    

    【讨论】:

    • 这与默认路由有何不同?
    猜你喜欢
    • 2014-12-21
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    • 2020-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-26
    相关资源
    最近更新 更多