【问题标题】:ASP.NET MVC 3 route issuesASP.NET MVC 3 路由问题
【发布时间】:2011-08-22 06:12:27
【问题描述】:

我正在处理http://mvcforum.codeplex.com 项目。

我们有 2 个区域,Forum 和 ForumAdmin。

我有一些命名路由,用于制作一个不错的 URL,在 URL 中包含论坛/主题标题:

context.MapRoute("ShowTopic", "Forum/Topic/{id}/{title}", new { controller = "Topic", action = "Index" });
context.MapRoute("ShowForum", "Forum/Forum/{id}/{title}", new { controller = "Forum", action = "Index" });
context.MapRoute("ShowCategory", "Forum/Category/{id}/{title}", new { controller = "Category", action = "Index" });

context.MapRoute(
    "Forum_default",
    "Forum/{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional },
    new string[] { "mvcForum.Web.Areas.Forum.Controllers" }
);

所以这几乎可以按预期工作。当我只是浏览论坛时,一切正常,但是当我需要发布一个主题(主题控制器上的创建方法)时,它失败了:

参数字典包含一个 参数“id”的空条目 不可为空的类型“System.Int32” 方法'System.Web.Mvc.ActionResult 索引(Int32,System.String,Int32)' 在 'mvcForum.Web.Areas.Forum.Controllers.ForumController'。 可选参数必须是 引用类型,可为空的类型,或者是 声明为可选参数。 参数名称:参数

这或多或少归结为不使用 Create 方法,而是选择 Index 方法。

知道我做错了什么吗?我应该/不需要哪些路线才能使其正常工作?

提前致谢! 斯蒂恩

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 routes asp.net-mvc-routing asp.net-mvc-areas


    【解决方案1】:

    URL Forum/Topic/Create 会命中路由 Forum/Topic/{id}/{title}

    问题是,Forum/Topic/{id}/{title}Forum/{controller}/{action}/{id} 路由大多无法区分(您的路由引擎如何知道“创建”不是主题路由的 id

    因此,我不知道有什么比用自己的路线声明每个动作更好的方法:

    context.MapRoute("CreateTopic", "Forum/Topic/Create/", 
        new { controller = "Topic", action = "Create" });
    context.MapRoute("ShowTopic", "Forum/Topic/{id}/{title}", 
        new { controller = "Topic", action = "Index" });
    

    【讨论】:

    • 这是我有点害怕的,那样我必须为每一个动作创建命名路由。
    • 真正的问题是“ShowTopic”路由将“Topic”作为 URL 的 2. 部分,在这种情况下与实际的 Controller 匹配。现在我想解决方法是将“ShowTopic”路由重写为没有主题作为 2. 部分的东西。
    猜你喜欢
    • 2023-03-14
    • 2011-10-16
    • 2011-07-03
    • 2011-09-14
    • 1970-01-01
    • 2013-11-13
    • 2011-11-30
    相关资源
    最近更新 更多