2012-03-05 21 views
3

私はエリアが登録されていないウェブサイトを持っています。それから私は "MyNewArea"と呼ばれる領域を登録しました。MVCデフォルトエリアが動作しません

ブログのような私のデフォルトのウェブサイトのリンクはもう機能しなくなりました。

これで、最初にプロジェクトを作成したときに、領域が1つの領域フォルダとデフォルトのフォルダが作成されました。

私のエリアにはAreaRegistrationクラスがあります。

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    context.MapRoute(
     "MyArea_default", 
     "{controller}/{action}/{id}", 
     new { action = "Index", id = UrlParameter.Optional } 
    ); 
} 

それがデフォルトと矛盾するように見えるこれは

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

の一つ私はデフォルトのサイトとコントローラで動作する領域を得るために行う必要がありますか?

答えて

1

変更される新しいエリアルートテーブル:

context.MapRoute(
    "MyArea_default", 
    "MyNewArea/{action}/{id}", 
    new { controller = "MyNewArea", action = "Index", id = UrlParameter.Optional } 
); 
2

そうだね、(それは最初にマッチしますのように「紛争」の意味での)ルートが競合するマッピングされました。 (ターンエリアルートで)、それはdidnの取り扱いのためにあなたの地域のルートを使用

 context.MapRoute(
      "MyArea_default", 
      "MyArea/{controller}/{action}/{id}", 
      new { controller = "MyAreaController", action = "Index", id = UrlParameter.Optional } 
     ); 

あなたはこのエリアを追加した後、あなたのURLが壊れた理由:あなたが何かのようになり、あなたのマッピングされたエリアのルートを変更する必要がありますあなたのMyAreaエリアに存在しません。

+1

コントローラを指定して、同じ問題が発生した場合でも使用する必要があります。 – griegs

+0

@griegs技術的にはうまくいきません。これは単純にパラメータのデフォルト値です。ですから、明示的にコントローラを指定しなければ、問題が発生します。しかし私は答えを編集して、 'controller'のデフォルトを含めました。 –

関連する問題