ASP.NET MVC 3路由问题

时间:2011-05-10 07:53:16

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

我正在研究http://mvcforum.codeplex.com项目。

我们有2个领域,论坛和ForumAdmin。

我有一些命名路线,可以在网址中创建一个包含论坛/主题标题的网址:

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

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

  

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

或多或少归结为没有按下Create方法,而是选择Index方法。

知道这是什么我做错了吗?我应该有什么路线/没有必要让它起作用?

提前致谢! 斯廷

1 个答案:

答案 0 :(得分:4)

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