2011-08-15 10 views
0

私は新しいルートを定義しました(下記参照)。私は、アプリケーションを起動すると、私はデフォルトでみたい:ASP.NET MVCでルートを定義

  • ゴーホーム/インデックス
  • 私はこれを使用すると、私は/顧客/詳細/ MyCode GET "MyCode"

に行けば私はHome/Indexから始めますが、/ Customer/Detail/MyCodeは常にnull値を返します。

私はroutes.MapRouteを逆場合は、私が持っている:デフォルトでは

  • 私は/顧客/詳細に行くと、私は私にはないmycode値のすべての時間(なしヌルanymoe)
  • を取得start on/Home/Index

アイデアはありますか?

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

routes.MapRoute(
    "CustomerDetail", 
    "{controller}/{action}/{code}", 
    new { controller = "Customer", action = "Detail", code = UrlParameter.Optional } 
); 

答えて

3

単一ルートは十分でしょう。

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{code}", // URL with parameters 
    new { controller = "Home", action = "Index", code = UrlParameter.Optional } // Parameter defaults 
); 

あなたがHome/Indexを要求すると、これはHomeControllerIndexアクションを呼び出すとcodeパラメータとしてnullを渡すと、あなたがCustomer/Detail/MyCodeを要求したときDetailアクションが可能になるだろうCustomerControllerで呼び出され、code=MyCodeが渡されました。

あなたがnullになった理由は、両方のあなたのルートが、彼らは両方のURLの最初のルートが一致していることを意味し、フォームController/Action/SomeCodeのものであることを意味し、同等であるが、パラメータはid代わりにあなたがいるcodeのと呼ばれていることですcode=nullになります。別の可能性は、単にデフォルトルートを残すことである。その後、

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

とidにDetailアクションにパラメータの名前を変更:

public ActionResut Detail(string id) 
{ 
    // if you request Customer/Detail/MyCode the id parameter will equal MyCode 
} 
+0

ホーム/インデックスは、Iを意味の値を受け取ることはありません/ Customer/Detail/MyCodeに行きます...私はそれを望んでいません。私はアプリケーションを開始し、私は/ホーム/インデックスを維持する必要があります。後で、私は/ Product/Detail/MyCodeのようなものを持っています。idは関連性がなく、idではありません。コードです。 –

関連する問題