我正在研究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方法。
知道这是什么我做错了吗?我应该有什么路线/没有必要让它起作用?
提前致谢! 斯廷
答案 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" });