2012-04-16 17 views
11

Ho una pagina aspx nel seguente percorso:Come indirizzare una pagina .aspx nel progetto asp.net mvc 3?

Areas/Management/Views/Ticket/Report.aspx 

voglio percorso che per il seguente percorso nel mio browser:

http://localhost/Reports/Tickets 

Come posso fare questo?

provo questo:

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

ma ho ottenuto l'errore 404.

Cosa sto facendo male?

Obs: l'ho messo prima del percorso Default.

+0

La tua pagina .aspx, una pagina web form di aspx o una pagina di motore di visualizzazione di moduli Web di mvc? –

+0

È una pagina .aspx. –

+0

Puoi avere.viste aspx che utilizzano il motore di visualizzazione dei moduli Web e che possono disporre di moduli Web .aspx. Sospetto che tu stia cercando di far funzionare un ibrido di moduli web e mvc, ma non è chiaro (almeno per me) che stai cercando di ottenere. –

risposta

13

Risolto! Quindi, dobbiamo aggiungere un percorso di contraint all'itinerario delle rotte per garantire che si attacchi solo ai percorsi in entrata, non alla generazione di percorsi in uscita.

Aggiungere la seguente classe al progetto (sia in un nuovo file o il fondo di global.asax.cs):

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

quindi modificare il percorso biglietti al seguente:

routes.MapPageRoute(
    "Tickets", 
    "Reports/Tickets", 
    "~/WebForms/Reports/Tickets.aspx", 
    true, null, 
    new RouteValueDictionary { { "outgoing", new MyCustomConstaint() } } 
); 
+5

Grazie CodeHobo per questa soluzione. [Riferimento] (http://forums.asp.net/t/1793416.aspx/1) – JabberwockyDecompiler

+0

Sono Vecthor. @JabberwockyDecompiler –

+0

Hmm, non so perché l'ho messo, hai cambiato il tuo nome? – JabberwockyDecompiler

-1

lo stai facendo di fronte. questo mappe vostro URL Areas/Management/Views/Ticket/Report.aspx a {controller = "Reports", action = "Tickets" }
cosa u dovrebbe fare, invece è impostare l'URL come
Reports/Tickets EDIT: - è possibile creare un routeHandler solo per il routing a questa pagina aspx .. come questo.

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

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

allora la u può aggiungere ur percorso per la tabella di percorsi esistenti utilizzando

Route customRoute = new Route("Reports/Ticket",null, new ASPXRouteHandler()); 
     routes.Add(customRoute); 
+0

Se metto 'Rapporti/Biglietti' come il sito si dirigerà verso la mia pagina di aspx? –

+0

ull deve fare un gestore di route .. attualmente url viene mappato a Reports/Tickets che esiste dosamente oziosamente .. e quindi si ottiene 404. prova a restituire una stringa da "Reports/Tickets" e vedere dove c'è sbagliato –

+0

Amico , non voglio vedere che ho torto. "Ho sbagliato", ok, lo so (è perché sono qui ^^), ora devo sapere come risolvere il mio problema. =) Un codice, un esempio, un collegamento ... –

-2

se si lascia il comportamento di default quando si crea il progetto asp.net

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

questo dovrebbe fare il trucco L'instradamento in asp.net mvc significa che non si collega direttamente alla aspx ma per azioni (metodi) che a loro volta restituiscono una visione appropriata ( aspx)

+0

Ma con questo l'URL (quando ritorno la pagina .aspx) avrà l'estensione .aspx alla fine, no? –

+0

No, non lo farò. Lo hai effettivamente testato, votandomi? Ho effettivamente corretto il codice in modo che restituisca http: // localhost/Reports/Tickets – coffeeyesplease

+0

se si sta tentando di utilizzare report di cristallo, quindi è necessario controllare questa risposta http://stackoverflow.com/questions/348785/crystal-reports -in-asp-net-mvc – coffeeyesplease

21

Se si sta tentando di utilizzare moduli web in un progetto MVC quindi sposterei il tuo .aspx fuori dalla cartella views, in quanto non è realmente una vista, quindi qualcosa come WebForms/Tickets/Report.aspx.

Nei moduli Web si esegue il mapping di un percorso chiamando il metodo 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 }); 

È necessario inserirlo prima del percorso MVC predefinito.

+0

Quando eseguo il progetto il browser reindirizza all'URL folling "http: // localhost: 37538/Rapporti/biglietti? action = Indice & regolatore = login". Oo –

+0

Fa corrispondere la rotta predefinita a una supposizione, la riga sopra deve essere immediatamente dopo la route.IgnoreRoute ("{resource} .axd/{* pathInfo}") 'linea –

+0

La metto direttamente dopo i' percorsi. IgnoreRoute ("{resource} .axd/{* pathInfo}") 'e ho ricevuto lo stesso url. =/ –

Problemi correlati