【问题标题】:Problem with giving id to action将 id 赋予操作的问题
【发布时间】:2011-08-26 15:32:08
【问题描述】:

我在 Global.asax.cs 中这样配置路由:

routes.MapRoute("Post", "Post/Show/{PostId}", new { controller = "Post", action = "Show" });

这是使用过的控制器的预览:

public partial class PostController : Controller
{
    public ActionResult Show(int PostId)
    {
        ...
    }
}

问题是它选择使用 Show() 动作,但它没有给出 int 值,因此它给出了 null。这是我使用的 URL 示例:../Post/Show/0

编辑: 当我像这样配置我的路线时:

        routes.MapRoute("Post", "Post/Show/{id}", new { controller = "Post", action = "Show" });
        routes.MapRoute("Timeline", "{controller}/{action}/{Page}", new { controller = "Timeline", action = "List" });

一切正常,但是当我这样配置时:

        routes.MapRoute("Timeline", "{controller}/{action}/{Page}", new { controller = "Timeline", action = "List" });
        routes.MapRoute("Post", "Post/Show/{id}", new { controller = "Post", action = "Show" });

第二条路线“发布”失败。 为什么?!

【问题讨论】:

  • 顺序应始终特定于一般。 Post/Show/1232123 将始终匹配与 {controller}/{action}/{page} 完全相同的模式。您始终可以对路由本身设置路由限制,以从匹配中清除不需要的路由,但没有理由(根据您的上述路由)您甚至需要交换它们。
  • 基于您的时间线路线。该路线基本上将充当您的默认路线。那是你要的吗?对http://site.com/ 的任何请求都将匹配您的时间线路线。
  • 不,我不想这样,我设置了默认路由:routes.MapRoute("Home", "", new { controller = "Home", Action = "Index" });
  • 只是确保。如果您愿意,您可以发布您的整个路线设置,我可以查看它以了解它的路线。或者!您可以下载/安装 Glimpse (getglimpse.com) 以查看匹配的内容和原因。

标签: c# asp.net asp.net-mvc-3 routing


【解决方案1】:

你应该试试:

routes.MapRoute("Post", "Post/Show/{PostId}", new { controller = "Post", action = "Show", PostId = UrlParameter.Optional });

【讨论】:

  • 正如鲍比所说,顺序很重要,我建议的路线必须在默认路线之前。您也可以使用默认路由而不是自定义路由,您可以将所有 PostId 替换为 id,它应该直接映射到默认 mvc 路由
  • 在这条路线上方我有另一条路线可以正常工作(就像有问题的路线一样,带有id)。这是那条路线: routes.MapRoute("Timeline", "{controller}/{action}/{Page}", new { controller = "Timeline", action = "List" });
  • 我会尝试将它移到另一个之后。
【解决方案2】:

这应该可以工作,只要记住路由出现在 global.asax 中的顺序也很重要。

 routes.MapRoute(
                "Post", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Post", action = "Show", id = UrlParameter.Optional }  // Parameter defaults
            )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-11
    • 2017-07-02
    • 1970-01-01
    • 2020-12-04
    • 2020-11-02
    • 2013-09-29
    • 2023-04-03
    • 1970-01-01
    相关资源
    最近更新 更多