2

我正在致力於http://mvcforum.codeplex.com項目。ASP.NET MVC 3路由問題

我們有2個區域,Forum和ForumAdmin。

我有幾個命名的路線,做一個漂亮的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" } 
); 

所以這幾乎是按預期工作。當我只是瀏覽論壇,一切工作正常,但是當我需要發佈一個主題(創建主題控制器上的方法),它失敗:

參數字典包含參數 無效項「身份證'的 不可爲空的類型'System.Int32'爲 方法'System.Web.Mvc.ActionResult 索引(Int32,System.String,Int32)'in 'mvcForum.Web.Areas.Forum.Controllers.ForumController' 。 可選參數必須是 參考類型,可爲空的類型,或者將其聲明爲可選參數 。 參數名稱:參數

或多或少歸結爲不能觸及Create方法,但選擇了Index方法。

任何想法是什麼我做錯了?什麼路線我應該/不必得到這個工作?

在此先感謝! 斯蒂恩

回答

4

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

這是我是一個有點害怕,那樣我就必須爲每一個動作創建命名路線。 – 2011-05-10 08:02:44

+0

真正的問題是,「ShowTopic」路由具有「Topic」作爲URL的一部分,在這種情況下,它與實際的Controller匹配。現在我想這個解決方案是重寫「ShowTopic」路由到沒有Topic作爲第2部分的東西。 – 2011-05-11 07:39:39