2010-02-04 64 views
2

我真的很想這樣瘋狂。這條路線爲什麼不能正常工作?

下面是在我的Global.asax

routes.MapRoute("BlogDetails", "Blogs/{id}/{title}", new { controller = "Blogs", action = "Details", id = "" }); 
routes.MapRoute(
"Default",            // Route name 
"{controller}/{action}/{id}",       // URL with parameters 
new { controller = "Home", action = "Index", id = "" } // Parameter defaults 
); 

這些是僅有的兩個路線我有。

當我嘗試訪問

http://mysite/Blogs/Edit/1它不工作,我得到這個錯誤

參數字典包含非可空類型「System.Int32的參數「ID」無效項'爲'mysite.Controllers.BlogsController'中的方法'System.Web.Mvc.ActionResult Details(Int32)'。可選參數必須是引用類型,可爲空類型,或者聲明爲可選參數。

爲什麼這會繼續發生?

感謝

我還要補充我的控制器代碼看起來像這樣

// 
// GET: /Blogs/Edit/5 

[Authorize] 
public ActionResult Edit(int id) 
{ 
    // do a bunch of stuff and return something 
} 
+0

如果您在第二條路線中刪除了「id」的默認值,該怎麼辦? – 2010-02-04 05:40:42

+0

仍然給我同樣的錯誤。它也打破了網站上的所有其他鏈接 – hanesjw 2010-02-04 05:43:54

回答

5

請嘗試以下

routes.MapRoute("BlogDetails", "Blogs/{id}/{title}", 
new { controller = "Blogs", action = "Details"}, 
new { id = @"\d+" }); 

至於MVC路線而言,{id}可以是任何東西(甚至字符串),所以它匹配Edit作爲一個字符串,它不能進入​​你的動作的int id

new { id= @"\d+" }作爲額外的參數添加告訴路由系統只匹配數字。

http://www.asp.net/(S(pdfrohu0ajmwt445fanvj2r3))/learn/mvc/tutorial-24-cs.aspx

+0

霍莉廢話它的工作!謝謝!!!!!!! – hanesjw 2010-02-04 05:48:06

1

你擁有的是2路實際上是「confilicting」,並在你的情況,你所期望的第一途徑得到回升,而不是第二。

也許你需要修改你的路由消除不確定性:

routes.MapRoute("BlogDetails", "Blogs/{id}-{title}", new { controller = "Blogs", action = "Details", id = "" }); 
routes.MapRoute(
    "Default",            // Route name 
    "{controller}/{action}/{id}",       // URL with parameters 
    new { controller = "Home", action = "Index", id = "" } // Parameter defaults 
); 

這個定義將明確區分之間:和http://mysite/Blogs/1-firsthttp://mysite/Blogs/Edit/1

或壞人提到嘗試添加約束的路線。