2012-10-09 12 views
5

Recentemente sono entrato in un gruppo che gestisce un'applicazione web ASP classica. Ha funzionato bene per le necessità del nostro gruppo. Tuttavia, è stata presa una decisione, prima di aderire, per passare a ASP .Net. Dal momento che siamo per lo più sviluppatori ASP, scriviamo codice in ASP .Net come farebbe in ASP classico (per la maggior parte). Sarebbe possibile introdurre MVC in questa applicazione/progetto?È possibile utilizzare il framework MVC in un'applicazione Web che utilizza attualmente ASP .NET?

Grazie!

risposta

2

Sì, è possibile utilizzare MVC in un progetto WebForms tradizionale. Ho migrato un grande progetto WebForms per MVC 2 un paio di anni fa, e qui sono i miei risultati (ho aggiornato a riflettere MVC 3)

  1. Assicuratevi di avere installato .NET 4.0, così come il MVC 3 estensioni framework e VS.
  2. Creare un nuovo progetto MVC vuoto da utilizzare come riferimento.
  3. Guarda il web.config predefinito per il progetto di riferimento. In pratica, vuoi usare il riferimento web.config e unire le cose che ti servono dal tuo progetto attuale.
  4. Guarda il riferimento global.asax.cs. Simile a quanto sopra, si desidera unire le modifiche nel file di riferimento .cs nel global.asax.cs dell'applicazione corrente.
  5. Sarà necessario aggiungere i seguenti riferimenti al progetto web:

    System.Web.Abstractions, System.Web.Extensions, System.Web.Helpers, System.Web.Mvc, sistema .Web.Routing

  6. È possibile abilitare le estensioni VS cambiando le ProjectTypeGuids:

    • In Esplora soluzioni, fare clic destro sul nome del progetto e scegliere Scarica progetto. Quindi, fare nuovamente clic con il tasto destro del mouse sul nome del progetto e selezionare Modifica nome progetto.csproj.
    • Individuare l'elemento ProjectTypeGuids e aggiungere {E53F8FEA-EAE0-44A6-8774-FFD645390401}.
    • Salvare le modifiche, fare clic con il pulsante destro del mouse sul progetto, quindi selezionare Ricarica progetto.
  7. Aggiungere le seguenti cartelle standard per i contenuti MVC:

    • ~/Vista
    • ~/Vista/Shared
    • ~/Controller
    • ~/Models (per i vostri modelli vista , opzionale)
    • ~/Contenuto (per CSS e immagini, opzionale)
    • ~/Script (per JS, opzionale)

Note aggiuntive:

  1. Se i WebForms esistenti si affida alle impostazioni web.config per l'autorizzazione (come impedire agli utenti non autorizzati), questo non sarà riconosciuto da azioni MVC, perché il routing funziona completamente separatamente dall'autorizzazione WebForms. Utilizzare AuthorizeAttribute per richiedere l'autorizzazione o limitare le azioni a determinati ruoli o utenti. Puoi anche specify global filters in modo da non dover applicare questo attributo su ogni singolo controller o azione.
  2. Potrebbero esserci ulteriori considerazioni per far funzionare MVC con le versioni di IIS precedenti a 7 o con i pool di applicazioni che utilizzano la pipeline Classic. Prendi in considerazione l'utilizzo di IIS 7+ con pipeline integrata.
  3. Le mie note precedenti riguardano principalmente il funzionamento della linea di base di MVC, che utilizza le viste ASPX. Le viste ASPX utilizzano la stessa marcatura dei file ASPX a cui si è abituati in WebForms. Puoi anche utilizzare la nuova sintassi Razor (primer), che consiglio vivamente. È possibile utilizzare contemporaneamente le pagine di visualizzazione ASPX e Razor. Tuttavia, non è possibile utilizzare una pagina master ASPX su una vista Razor (o viceversa). Inoltre, MVC troverà e utilizzerà le visualizzazioni ASPX prima delle visualizzazioni Rasoio, quindi se si aggiorna una vista a Rasoio, eliminare l'ASPX originale. Dovrai fare un piccolo lavoro aggiuntivo per abilitare le visualizzazioni Razor. Sto cercando di trovare i miei appunti per abilitare Razor. Aggiornerò quando li trovo. Una volta installato e funzionante Razor, è possibile utilizzare this tool by Telerik per convertire ASPX in Razor.
  4. Here is a question su SO per un problema che ho avuto durante l'aggiornamento. Lo sto fornendo solo perché ha trattato alcuni dei punti che ho citato sopra in modo più dettagliato. Tuttavia, stavo aggiornando a MVC 2 al momento, quindi alcune di queste cose non sono aggiornate.
+0

Questa risposta non menziona il routing; Sospetto che i percorsi MVC predefiniti interferiscano con la disponibilità delle pagine ASP.Net più normali. –

+0

@ChrisMoschini MVC cercherà di vedere se la risorsa richiesta corrisponde a un file fisico e, in tal caso, quel file viene elaborato in base al gestore. Quindi in termini di pagine .ASPX, non è un problema. Tuttavia, dovrai risolvere eventuali problemi relativi a un URL che è instradabile a MVC e anche a uno o più altri gestori.Per il tuo progetto WebForms medio, non è molto comune, ma è possibile. Esempio: dì che hai un documento predefinito. ASPX ma vuoi che MVC prenda il sopravvento. Sarà necessario A) Modificare il documento predefinito in modo che .ASPX non sia più considerato o B) eliminare l'ASPX – HackedByChinese

2

La risposta breve è sì è possibile.

Scott Hanselman ha scritto circa this topic prima.

A seconda delle competenze della tua squadra, potresti trovare difficile aumentare la velocità: è possibile scrivere codice di stile MVC pulito in ASP classico ma la maggior parte delle persone non lo fa.

1

Ovviamente è tecnicamente possibile. Tuttavia, sembra che sarebbe uno shock culturale, in quanto MVC funziona in modo un po 'diverso rispetto a Classic ASP o Web Form di ASP.NET. Penso che varrebbe la pena - o semplicemente attaccare con Web Form di ASP.NET se questo sembra più naturale. Ma se non ti sei ancora completamente impegnato in WebForms, MVC sembra altrettanto semplice da spostare in IMO.

1

Sì. Ho lavorato a un progetto iniziato come ASP.NET e successivamente aggiunto alcune pagine MVC ASP.NET. Alla fine ci è piaciuto molto di più MVC che alla fine abbiamo migrato tutte le nostre pagine WebForms per utilizzare MVC. Ma per tutto il tempo, i due sistemi hanno funzionato molto bene insieme.

Ecco l'unico vero trucchetto che posso ricordare nell'esecuzione: WebForms funziona avendo l'intera pagina racchiusa in un grande tag <form>. Poiché HTML non consente di avere tag nidificati da <form>, in genere non è possibile utilizzare i moduli MVC all'interno di una pagina WebForms. Mantenere separate le pagine WebForms dal contenuto MVC, evitare l'uso di moduli HTML nel contenuto MVC che potrebbero apparire in una pagina WebForms o utilizzare finestre di dialogo popup per i moduli creati al di fuori dell'area DOM di WebForms.

Problemi correlati