15

次のパスに .aspx ページがあります。

Areas/Management/Views/Ticket/Report.aspx

それをブラウザの次のパスにルーティングしたい:

http://localhost/Reports/Tickets

どうやってやるの?

私はこれを試します:

routes.MapRoute(
    "Tickets", // Route name
    "Areas/Management/Views/Ticket/Report.aspx", // Original URL
    new { controller = "Reports", action = "Tickets" } // New URL 
);

しかし、私は404エラーが発生しました。

私が間違っているのは何ですか?

Obs: それをDefaultルートの前に置きました。

4

4 に答える 4

22

MVCプロジェクトでWebフォームを利用しようとしている場合は、.aspxをviewsフォルダーから移動します。これは、実際にはビューではないため、WebForms / Tickets/Report.aspxのようなものです。

MapPageRouteWebフォームでは、メソッドを呼び出してルートをマップします。

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapPageRoute("Tickets", "Reports/Tickets", "~/WebForms/Tickets/Report.aspx");
routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional });

これをデフォルトのMVCルートの前に配置する必要があります。

于 2012-04-16T13:59:46.497 に答える
14

解決しました!そのため、Web フォーム ルートにルート制約を追加して、発信ルートの生成ではなく着信ルートのみをキャッチするようにする必要があります。

次のクラスをプロジェクトに追加します (新しいファイルまたは global.asax.cs の下部)。

public class MyCustomConstaint : IRouteConstraint{
    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection){
        return routeDirection == RouteDirection.IncomingRequest;
    }
}

次に、チケット ルートを次のように変更します。

routes.MapPageRoute(
    "Tickets",
    "Reports/Tickets",
    "~/WebForms/Reports/Tickets.aspx",
    true, null, 
    new RouteValueDictionary { { "outgoing", new MyCustomConstaint() } }
);
于 2012-04-16T17:33:59.690 に答える
-1

あなたはそれを逆にしています。Areas/Management/Views/Ticket/Report.aspxこれはあなたのURLを{にマップします{controller = "Reports", action = "Tickets" }
代わりに、URLを
Reports/Tickets 編集として設定する必要があります:-この.aspxページにルーティングするためだけにrouteHandlerを作成できます..このように。

public class ASPXRouteHandler : IRouteHandler 
{ 
   public IHttpHandler GetHttpHandler(RequestContext requestContext) 
   { 

     return BuildManager.CreateInstanceFromVirtualPath("~/Areas/Management/Views/Ticket/Report.aspx",  typeof(Page)) as Page; 
   } 
}

次に、使用して既存のルートテーブルにルートを追加できます

Route customRoute = new Route("Reports/Ticket",null, new ASPXRouteHandler()); 
      routes.Add(customRoute); 
于 2012-04-16T13:44:16.070 に答える
-2

asp.net プロジェクトを作成するときにデフォルトのルーティングをそのままにしておく場合

public class ReportsController : Controller
{
        public ActionResult Ticket()
        {
            return View();
        }        
}

これでうまくいくはずです。asp.net mvc のルーティングは、.aspx に直接リンクするのではなく、適切なビュー ( .aspx)を返すアクション (メソッド) にリンクすることを意味します。

于 2012-04-16T13:48:14.280 に答える