2011-06-28 38 views
1

我將下面的路線添加到了我的MVC應用程序中。爲什麼Mvc Maproutes似乎違反DRY原則

routes.MapRoute("leads", "leads/{leadId}", new { controller = "Leads", action = "ViewLead" }); 

然而,似乎任何操作方法斷引線現在控制器使其儘量去ViewLead行動,並沒有ID將作爲它的一個動作被傳遞。 我有點失望,那麼必須添加以下到我的路線,這樣我不會在我的其他行動得到異常:

routes.MapRoute("leadIndex", "leads", new { controller = "Leads", action = "Index" }); 
    routes.MapRoute("leadAdd", "leads/addlead", new { controller = "Leads", action = "AddLead" });    
    routes.MapRoute("leadsSearch", "leads/searchleads", new { controller = "Leads", action = "SearchLeads" });    
    routes.MapRoute("leadsGetAll", "leads/getallleads", new { controller = "Leads", action = "GetAllLeads" }); 
    routes.MapRoute("leadsUpdate", "leads/updatelead", new { controller = "Leads", action = "UpdateLead" }); 
    routes.MapRoute("leadsRecipients", "leads/getrecipients", new { controller = "Leads", action = "GetRecipients" }); 

我在這裏做錯了什麼?這似乎違背DRY的原則,因爲我不必在之前指定這些路線,但現在我確實...

回答

2

所有路線都與導聯/ {leadId}路線匹配的原因是因爲它匹配{string}/{string}的模式。你需要做的是添加一個約束,說明leadid是一個int。

routes.MapRoute(
    "leads", 
    "leads/{leadId}", 
    new { controller = "Leads", action = "ViewLead" }, 
    new { leadId = @"\d+" }); 

這隻會匹配第二個位置的參數至少有一個或多個整數的路由。

但是,如果你想有相同的基本多個自定義路線,通過菲爾哈克看看這篇文章:http://haacked.com/archive/2010/12/02/grouping-routes-part-1.aspx

希望這有助於!

+0

非常感謝!我不知道你可以添加約束的路線。 – jaffa

相關問題