2017-04-24 2 views
0

私のホームコントローラでは、IDパラメータを持たないすべてのアクションに対して、1つのアクションを除くすべてのアクションにIDパラメータがありません。コントローラには表示されません。私はそれを通過した場合に最初のindexアクションルートをOnlyCourseルートを置く場合は1つのアクションのURLにアクションが表示されないMVCルーティングですが、同じコントローラの別のアクションのURLにのみ表示されるIDはありますか?

routes.MapRoute(
      "OnlyCourse", 
      "{courseabbrev}", 
      defaults: new { controller = "Home", action = "course", courseabbrev = UrlParameter.Optional } 
     ); 

routes.MapRoute(
       "OnlyAction", 
       "{action}", 
       defaults: new { controller = "Home", action = "Index"} 
      ); 

routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{courseabbrev}", 
       defaults: new { controller = "Home", action = "Index", courseabbrev = UrlParameter.Optional } 
      ); 

:1つのアクションのために私は、例えばURLに表示するコントローラやアクション、そのアクションのための唯一のIDパラメータ、どちらを希望しますOnlyCourseルートが見つからない場合は、まずOnlyActionルートを配置します。これらのルートを特定のアクションに個別に対応させるにはどうすればよいですか?

編集 -

したがって、たとえばのみコース(コースアクション)のためのURLは次のようになります。

http://www.sitename.come/courseabbrev

、他のアクションのためのURLが

http://www.sitename.com/action

だろう

私は以下を試しました:

routes.MapRoute(
      "OnlyCourse", 
      "{courseabbrev}", 
      defaults: new { controller = "Home", action = "course"}, 
      constraints: new { action = "course" } 

     ); 

     routes.MapRoute(
      "OnlyAction", 
      "{action}", 
      defaults: new { controller = "Home" } 
     ); 

これはインデックスアクションのトリックですが、それ以外のアクションは引き続きOnlyCourseルートを使用します。私は制約を追加しようとしましたが、そうしたルートではインデックスから離れたすべてのアクションを考慮しているので、あまり効果がないようです。このような

+0

なりますルートは/courseabbrevその後、

routes.MapRoute( "OnlyCourse", "{courseabbrev}", defaults: new { controller = "Home", action = "course" } ); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new {controller = "Home", action = "Index", id = UrlParameter.Optional} ); 

になりたい場合は、あなたがしようとしているからOnlyCourseとOnlyAction両方のURLを追加することができますアクセス – Usman

+0

こんにちは、私は質問のURLといくつかの他の所見を加えました。乾杯。 – Rob

+0

idがない場合でもデフォルトルートだけがあなたのために処理する必要はありません – Usman

答えて

0

それ文句を言わない仕事ルート"{courseabbrev}""{action}"両方のテンプレートが似手段ですあなたは"{courseabbrev}"を使用している場合、それは"{action}"を無視しますので、あなたがそれらのいずれかがより具体的に確認する必要がありますので

routes.MapRoute(
    "OnlyCourse", 
    "courseabbrev/{courseabbrev}", 
    defaults: new { controller = "Home", action = "course"} 

); 

routes.MapRoute(
    "OnlyAction", 
    "{action}", 
    defaults: new { controller = "Home", action = "Index" } 
); 

ので、あなたのURL

http://www.sitename.come/courseabbrev/yourcourseabbrev

http://www.sitename.com/action

になります10

あなたが今、あなたのURLが

http://www.sitename.come/courseabbrev

http://www.sitename.com/controller/action

+0

こんにちは、あなたの答えをありがとう、はい私は別のアクション名を使用して区別することができますが、私の問題を解決しないことを認識しています。私の質問の全体的なポイントは、URLは、その前に何も置かずにOnlyCourseアクションのためだけに 'courseabbrev'にすることです。残念ながら、あなたのソリューションは問題を解決しません。このタイプのルーティングを使用することが単に不可能な場合は、おそらく属性ルーティングを調べます。 – Rob

+0

@ロブその後、あなただけのアクションは必要ありませんルートは私の答えを編集させてください – Usman

+0

こんにちはUsman、申し訳ありませんが、おそらく私は明確ではない、私は私の元の質問ごとにURLが必要です。したがって、コースを除くすべてのアクションでは、URLはsitename.com/actionであり、もちろんsitename.com/courseabbrevになります。ですから、私は、コースを除いて、そしてコース自体のために、すべてのアクションのための特定のルーティングが必要です。私は属性マーキングを使用してこれを達成しましたが、便利なこの伝統的なルーティングを使用してそれを行う方法がある場合もあります。乾杯 – Rob

関連する問題