2012-04-16 91 views
11

我在下面的路徑中的.aspx頁面中:如何在asp.net mvc 3項目中路由.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之前。

+0

您的.aspx頁面,Web窗體aspx頁面還是mvc webforms視圖引擎頁面? – 2012-04-16 13:44:52

+0

是.aspx頁面。 – 2012-04-16 13:46:48

+0

你可以有。使用Web表單視圖引擎的aspx視圖,並且您可以使用.aspx Web表單。我懷疑你正在嘗試混合使用Web表單和mvc來工作,但至少你還不清楚你正在努力達到的目標。 – 2012-04-16 13:51:48

回答

13

解決!因此,我們需要向webforms路由添加路由限制,以確保它只捕獲到達的路由,而不是到達的路由生成。

添加下面的類到您的項目(無論是在一個新的文件或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() } } 
); 
+5

感謝CodeHobo提供此解決方案。 [參考](http://forums.asp.net/t/1793416.aspx/1) – JabberwockyDecompiler 2013-04-02 18:23:27

+0

我是Vecthor。 @JabberwockyDecompiler – 2017-08-22 13:42:19

+0

嗯,不知道爲什麼我把這個,你改變了你的名字? – JabberwockyDecompiler 2017-08-22 19:42:43

-1

你正在做相反的事情。這是你的網址Areas/Management/Views/Ticket/Report.aspx映射到{controller = "Reports", action = "Tickets" }
什麼ü應該做的,而不是爲 設定的網址爲
Reports/Tickets 編輯: - 您可以創建一個routeHandler只是路由到該.aspx頁面中..這樣。

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); 
+0

如果我把'Reports/Tickets'如何將網站路由到我的aspx頁面? – 2012-04-16 13:46:01

+0

ULL必須做出路由處理。目前烏爾網址是越來越映射到報告/門票這obsly dosent存在..因此烏爾獲得404嘗試從「報告/票」返回一個字符串,並ULL看到烏爾錯 – 2012-04-16 13:48:04

+0

多德,我不想看到我錯了。 「我錯了」,好吧,我知道(這是因爲我在這裏^^),現在我必須知道如何解決我的問題。 =)一個代碼,一個例子,一個鏈接... – 2012-04-16 13:51:42

-2

在創建asp.net項目

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

它添加到現有的路由表,如果您保留默認路由應該做的伎倆。 在asp.net mvc的路由意味着你不直接鏈接到的.aspx但操作(方法),然後再將返回相應的視圖(的.aspx)

+0

但有了這個url(當我返回.aspx頁面)將在最後有.aspx,不會? – 2012-04-16 13:57:14

+0

不,它不會。你真的測試過了,(投我票)?其實我已經糾正了代碼,以便它會返回 的http://本地主機/報告/票 – coffeeyesplease 2012-04-16 14:00:57

+0

,如果你要使用水晶報表,那麼你應該檢查這個答案http://stackoverflow.com/questions/348785/crystal-reports -in-asp-net-mvc – coffeeyesplease 2012-04-16 14:17:15

21

如果你想利用Web表單在MVC項目中,我會將.aspx移出views文件夾,因爲它不是一個真正的視圖,所以就像WebForms/Tickets/Report.aspx。

在web窗體中,通過調用MapPageRoute方法映射路線。

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路由之前。

+0

當我運行該項目的瀏覽器重定向到URL folling的「http://本地主機:37538 /報告/票?行動=指數及控制器=登錄」。吳 – 2012-04-16 14:19:20

+0

它在猜測相匹配的默認路由,線路上方需要'routes.IgnoreRoute後直接(「{}資源個.axd/{*} PATHINFO」)'行 – 2012-04-16 14:28:32

+0

我把那直接'路線之後。 IgnoreRoute(「{resource} .axd/{* pathInfo}」)'和我有相同的網址。 =/ – 2012-04-16 14:31:38