5

私はWebホストにMVC4 .NET 4.0アプリケーションをデプロイしました。エリア外のルートは正常に動作しています。私のビンに配備されたMVC4アプリケーションのエリアルーティングに問題がありますか?

@Html.ActionLink("Register as a Client", "Register", "Account", new { registrationType = "Client"}, null) 

リンクが正常に動作し、リンクが正しいページを開きます。しかし、このような地域ベースのアクションへのリンクを含む:

@Html.ActionLink("Authors", "Index", "Home", new { Area = "Author", registrationType = "Author" }, null) 

実際にブラウザにレンダリングされたリンクは、それは注目に値するかもしれすなわち、

http://mylivedomain.com/?Area=Author&registrationType=Author 

をアクションとコントローラが欠落しているCSSのバンドルMVC4の機能はデプロイメントの後では機能しませんでした。そして、私はスタイルシートへの古典的なスタイルリンクを使用することに戻りました。

MAYBE RELATED:私の質問:Why is unmodified template code in my MVC4 app trying to register areas twice?

JUSTの場合:はデフォルトrouiteのエリアルートのマッピングから、デフォルトのアクションを削除するには、この問題を解決しました。 VS2012のテンプレートコードには、デフォルトのコントローラはありませんでした。

+0

ActionLink()の最後に 'new {}'を使うのを忘れましたか? http://stackoverflow.com/questions/2036305/how-to-specify-an-area-name-in-an-action-link –

+0

@NickDeVore、代わりに 'null'を使用しています。私は私の開発マシンで、私は展開している前のMVC3のバージョンの私のサイトを前に働いていました。 – ProfK

+0

いいですね、私はちょうど他の質問が見つかりました。とにかく、ちょっと考えました。 –

答えて

2

あなたのエリアのアクションメソッドのthis.ControllerContext.RouteData.DataTokens ["area"]を確認してみてください。

私は、領域名が単に空の文字列だった同様の問題を抱えています。

アクションメソッドでDataTokenを設定すると、簡単に修正できますが、なぜMVCがエリア名を設定しないのかという質問には答えられません。

2

クエリ文字列で領域を指定するため、Global.asax.csからのルートを適用する必要があります。

public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "Default", 
      "{controller}/{action}/{id}", 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ).DataTokens.Add("area","Author"); 
    } 

このコードは、ホーム/インデックスデフォルトルートを作成し、URLにホーム/インデックスをスキップ:私はあなたがそこにこのような何かを持って信じて。 controller = "Home2"のようにcontroller = "Home"を変更すると、Home/Indexと新しいデフォルトルートHome2/Indexのフルリンクが表示されます。同様に、指定されたエリアのデフォルトルートにも適用されます。で

public class testAreaRegistration : AreaRegistration 
{ 
    public override string AreaName 
    { 
     get 
     { 
      return "test"; 
     } 
    } 

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

明示的にデータトークンを追加すると、「同じキーを持つ項目が既に追加されています。例外。 – ProfK

1

はあなたのApplication_Startでこのラインを持っていることを確認してください@ Html.ActionLink

この形式を使用する

@Html.ActionLink("Authors", "Index", "Home", new { Area = "Author", registrationType = "Author" }, new{}) 

解決しました。

+1

そのコードは、プロジェクト/アイテムテンプレートの一部として自動的に追加されます。 – ProfK

1

:あなたはこのようなAreaRegistration.cs何かを持っている必要があり、各領域で

AreaRegistration.RegisterAllAreas(); 

:あなたのglobal.asax.csで

0

どのエリアでもMvcContribからPortableAreaRegistrationを継承していますか?

ポータブルエリアからすべてのPortableAreaRegistrationsを削除し、単にAreaRegistrationを使用するまで、MVC4は追加のライブラリなしでポータブルエリアを登録できるので、まったく同じ症状(サーバー上ではなくローカルで動作)がありました。

+0

私はMvcContribを全く使用していません。 – ProfK

関連する問題