1

開発マシンとデプロイメントサーバーの間でUrl.RouteUrlからの出力に違いが見られます。Visual Studio 2008を実行していて、展開ボックスはWindows2003Serverです。ルーティングテーブルの.aspx拡張子で実行するようにGlobal.asax.csを構成しました。ただし、「Search-Basic」という名前のルートを使用すると、Url.RouteUrl( "Search-Basic"、new {category = "Test"、searchExpression = "search this"})からの出力がありません。

コードを表示:

<%= Url.RouteUrl("Search-Basic", new {category = "test", searchExpression="search this"}) %>

Global.asax.csコード:

            // routes for IIS 6 and version below
        routes.MapRoute(
            "Search-Basic",
            "Search.aspx/Basic/{category}",
            new { controller = "Search", action = "Basic", category = "All" }
            );

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

        routes.MapRoute(
            "Root",
            "",
            new { controller = "Home", action = "Index", id = "" }
        );

開発ボックスで、期待される出力が得られます:/Search.aspx/Basic/Test?searchExpression=search%20this

ただし、デプロイメントサーバーでは、出力がまったく得られません。おそらく1つの違いは、デプロイメントサーバーの仮想ディレクトリでアプリケーションを実行していることです。http://testmachine.com/sm/testappname/のようになります。ここで、「/ sm」は仮想ディレクトリであり、「/testappname」はアプリケーションを保持する仮想ディレクトリです。

何か案は?

よろしくお願いします。

4

1 に答える 1

1

RC1 (非更新) にバグがあるため、同じバージョンの ASP.NET MVC を実行していますか?たとえば、ルートでコントローラーが指定されていないルートがある場合に、この動作が発生します。

もう 1 つの回帰は、場合によっては、ルート名を指定すると RouteUrl (したがって RouteLink) メソッドが空の文字列を返すことですが、ルートには URL のパラメータではないデフォルト パラメータがあります。

たとえば、次のルートがあるとします。

routes.MapRoute("route-name", "foo/bar", new {controller="Home", action="index"});

コントローラーにはデフォルト値がありますが、URL の一部ではないことに注意してください。次に指定した場合:

<%= Url.RouteUrl("route-name") %>

そのルートを使用して URL をレンダリングすることを期待するかもしれませんが、そうではありません。このバグは、すべての URL 生成ヘルパーをリファクタリングして共通メソッドを呼び出すときに導入されました。ただし、RouteUrl メソッド (非 MVC 固有) は、MVC 固有のメソッド (Action など) とは微妙に異なる動作をする必要があることがわかりました。この違いが考慮されるように、common メソッドにフラグを追加しました。これは、表面積が大きくない修正でした。

http://haacked.com/archive/2009/01/30/aspnetmvc-refresh.aspxを参照してください。

于 2009-02-13T21:22:39.993 に答える