5

「ライブ」展開テストのために、MVC4 .NET 4.0 アプリを Web ホストに展開しました。エリア以外のルートは正常に機能しています。

@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

MVC4 の CSS バンドル機能が展開後に機能しなかったことに注意してください。個々のスタイルシートへの従来のスタイル リンクを使用するようにロールバックしました。

関連する可能性があります: 私の質問: MVC4 アプリの変更されていないテンプレート コードがエリアを 2 回登録しようとするのはなぜですか?

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

4

5 に答える 5

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");
    }

このコードは Home/Index のデフォルト ルートを作成し、 url の Home/Index をスキップします。たとえば controller = "Home2" など、別のもので controller = "Home" を変更すると、Home/Index と新しいデフォルト ルート Home2/Index の完全なリンクが表示されます。エリア内のデフォルト ルートが指定されている場合、同様のことが適用されます。

于 2012-07-25T06:25:21.167 に答える
2

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

エリア名が単に空の文字列であるという同様の問題がある状況がありました。

アクション メソッドで DataToken を設定すると、簡単な解決策が得られるかもしれませんが、MVC がエリア名を設定しない理由については答えられません。

于 2012-07-20T14:38:11.203 に答える
1

global.asax.csで、次の行が含まれていることを確認してくださいApplication_Start

AreaRegistration.RegisterAllAreas();

各エリアには、AreaRegistration.csが次のようになっている必要があります。

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 }
        );
    }
}
于 2012-07-25T08:44:37.787 に答える
1

@Html.ActionLink を使用

この形式を使用します

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

私の問題を解決しました。

于 2012-10-17T11:06:42.823 に答える
0

あなたの地域のいずれかで MvcContrib から PortableAreaRegistration を継承していますか?

MVC4 はライブラリを追加せずにポータブル領域を登録できるため、Portable Areas からすべての PortableAreaRegistrations を削除し、単純に AreaRegistration を使用するように戻すまで、以前はまったく同じ症状 (サーバーではなくローカルで動作) がありました。

于 2012-11-13T21:45:14.770 に答える