2011-06-28 6 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+" }); 

これは、2番目の位置のパラメータが少なくとも1つ以上の整数を持つ場合にのみ一致します。

しかし、あなたは同じベースで複数のカスタムルートを持っていると思った場合、フィル・ハークでこの記事をチェックアウト:http://haacked.com/archive/2010/12/02/grouping-routes-part-1.aspx

は、この情報がお役に立てば幸い!

+0

大変感謝!私はあなたがルートに制約を加えることができるのか分からなかった。 – jaffa

関連する問題