2

MVC4 アプリケーションを Web サーバーに公開すると、奇妙な問題が発生しました。

すべてが正常に機能しており、ルーティング構成でいくつかの設定を変更しました。

問題は、localhost で Web サイトを実行すると、すべてのリンクが見事にレンダリングされることです。

@Html.ActionLink("Market Summary","Market","Home") URL として表示されます。

ただし、プロジェクトをサーバー (winhost) にアップロードすると、リンクにカーソルを合わせると、単にドメイン名がポイントされます。私のプロジェクトのどのページでもこれを行います...

ローカルホストで正常に動作するため、なぜこれが発生するのかわかりません。

これが私のルーティング設定です。

   using System;
   using System.Collections.Generic;
   using System.Linq;
   using System.Web;
   using System.Web.Http;
   using System.Web.Mvc;
   using System.Web.Routing;

   namespace ReportGenerator.Web
   {
public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );


        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}/{param2}/{param3}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional , param2 = UrlParameter.Optional, param3 = UrlParameter.Optional }

         );


    }
  }
 }

更新: リンクは実際には空白になります。 <a href="">

更新 2: コントローラーから param2 と param2 を削除すると、すべてが期待どおりに機能します... なんてこった!?

更新 3: 問題は解決しました。非常に奇妙な問題です。私の答えを見てください。

4

2 に答える 2

2

これは、ASP.NETMVCの既知の問題です。

調べてみると、属性を使用している場合Html.ActionLink、サーバーが不足しているパラメーターを入力しようとすることがよくあります。これにより、何らかの理由でURLが空白になります。

この原因はわかりません。他の誰かがはるかに多くの洞察を提供できると確信しています。

基本的に、すべてのURLにパラメータが含まれていない限り、デフォルトルートに複数の複数のIDを含めることはできません。

したがって、私が行ったことは、2番目のルートを作成し、次のように機能するリンクを作成することでした。

   @Html.RouteLink(Model.MembershipCount.ToString(), "detailed", new { action="YourActionName", id = "blah", param2 = "foo", param3 = "foo2" }, null) 
   //detailed is where you put whatever you named your route.

私のルーティングクラスは次のようになります

   public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

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

        );

        routes.MapRoute(
            name: "Detailed",
            url: "{controller}/{action}/{id}/{param2}/{param3}",
            defaults: new { controller = "Home", action = "home", id = UrlParameter.Optional, param2 = UrlParameter.Optional, param3 = UrlParameter.Optional }

         );             


    }
}

これは問題なく機能しましたが、開発サーバーでこの問題が発生しなかった理由については、まだ完全に途方に暮れています。おそらく、Microsoftはこの狂気にパッチを当てており、私のホストはフレームワークを更新していません。

これが誰かの欲求不満を救うことを願っています。

于 2012-11-14T08:19:53.180 に答える
1

ASP .NET MVC 3 アプリで同様の問題が発生しましたが、追加することで解決しました

<modules runAllManagedModulesForAllRequests="true" />

<system.webServer>web.config ファイルのセクションに追加します。アプリは開発マシンでは正常に機能しましたが、サーバーでは機能しませんでした。

于 2012-11-14T07:16:30.757 に答える