Risposte:
Se stai creando un'applicazione a pagina singola (SPA) , probabilmente non hai bisogno di "MVC" in ASP.NET MVC . Le viste, in particolare le viste dinamiche, sono probabilmente fornite / manipolate dal lato client. Maniglie angolari che vanno bene.
Ma forse non vuoi una SPA al 100%. E allora? Immagina invece 10 pagine, ma 10 pagine che sono moltodinamico. Dopo che un utente accede, c'è un piccolo badge utente nell'angolo destro. Non è dinamico. Mostra solo alcune cose eleganti come il "punteggio" dell'utente e il suo ultimo selfie. Metti in cache le cose eleganti in modo che possano essere facilmente recuperate. Ora, puoi andare in due modi con questo. Se sei un purista MVC sul lato client, recupera semplicemente i dati del badge dopo la consegna del payload HTML iniziale, proprio come tutti gli altri dati. Ma forse non sei un purista. Forse sei l'opposto di un purista. Forse sei un impurista. Pertanto, invece di fornire l'HTML iniziale, fornire alcuni JavaScript che verranno postati sul tuo server, pubblicarli tramite JavaScript per acquisire i dati del badge e infine fonderli in una vista tramite MVC sul lato client,quello come HTML iniziale. Dopo la consegna del codice HTML iniziale, si procede con le tipiche buffonate MVC sul lato client.
Quindi ... MVC sul server e sul client è solo un modo conveniente per organizzare il codice che era un casino nel 2001. Non devi scegliere l'uno o l'altro. Puoi scegliere entrambi. Concesso, più fai dopo la consegna dell'HTML iniziale, meno hai bisogno di MVC lato server. Tuttavia, è lì per te se ne hai bisogno. Ad esempio, ho lavorato su un'applicazione ASP.NET MVC / Angular in cui i template angolari esterni potrebbero effettivamente essere .NET MVC ActionResult. Ciò significa che il controller del server potrebbe unire i dati nella sua vista, inviarli ad Angular come modello e il controller di Angular potrebbe quindi unire i suoi dati nella vista. Non sto dicendo che questa è una buona idea, ma mostra solo che una forma di MVC non rende obsoleta l'altra.
Inoltre, indipendentemente da come distribuisci Angular, avrai bisogno di un modo per fornire quel codice HTML iniziale, i modelli e, soprattutto, i dati. Perché non utilizzare una piattaforma che lo rende facile? Ce ne sono molti, ma .NET MVC non è sciatto. Come ho detto, puoi rendere l'HTML iniziale e i modelli angolari esterni il risultato di un'azione MVC, ma meglio ancora, puoi utilizzare l' API Web .NET per fornire i dati. L'API Web è deliziosa come la composta di albicocche.
Riassumendo: MVC è solo uno schema. Potresti voler usare quel modello su qualsiasi numero di livelli fisici. Non può essere utilizzato. Usalo liberamente se ha senso. Inoltre, Angular potrebbe non essere comunque MVC (così dicono le persone che si preoccupano di queste cose), quindi sentiti libero di usarlo con uno strumento che ha "MVC" nel nome. Inferno, anche se è MVC, mescola e abbina come desideri.
ASP.NET MVC è un framework lato server; non importa quali librerie JavaScript usi. AngularJS è una libreria lato client, a cui non importa quale tecnologia lato server sia alla base del sito Web: può essere Python, ASP.NET MVC o persino il semplice vecchio gruppo di file HTML statici archiviati direttamente sul disco.
ASP.NET MVC e AngularJS sono entrambi compatibili e ci sono molti progetti là fuori che li usano insieme.
Avete bisogno di usare entrambi? Non proprio. Dipende interamente dalle esigenze del tuo progetto.
Se il tuo sito Web è dinamico, devi utilizzare alcuni script lato server. È possibile utilizzare ASP.NET e il fatto che si sta utilizzando AngularJS non renderà il codice lato server più MVC. Se vuoi essere in grado di strutturare l'applicazione lato server come MVC, scegli ASP.NET MVC.
Allo stesso modo, il fatto che si sta utilizzando ASP.NET MVC non implica nulla sulla struttura del codice lato client. Puoi mettere tutto il tuo JavaScript in un singolo file senza pensare alla struttura ed essere contento (fino a quando il progetto non inizia a crescere). Anche in questo caso, AngularJS si presenta come un modo per strutturare l'applicazione sul lato client.
Nota a margine: hai taggato la tua domanda ASP.NET MVC 3. A meno che non si tratti di un progetto legacy da mantenere o di avere vincoli specifici quando si ospita l'applicazione su server legacy che non sono stati aggiornati negli ultimi quattro anni, è possibile utilizzare ASP .NET MVC 4 o 5 invece.
Se si utilizza Visual Studio, esiste un nuovo modello di sito Web MVC "app a pagina singola" che include controller angolari e MVC Web Api.
Funziona bene perché il codice lato server MVC fornisce endpoint json per il codice lato client angolare da chiamare.
Inoltre, puoi utilizzare i controller MVC per offrire la vista html di base o le viste per l'app a pagina singola. questo ti dà la potenza della generazione lato server, autorizzazione, reindirizzamenti, gestione degli errori ecc
Spesso vorrai una piccola quantità di html / javascript generato dal server anche su una singola app per pagina, cose come gli endpoint url per ambienti diversi, lingue diverse o persino la pagina di autenticazione dispari che potrebbe essere più semplice da fare sul lato server.
3 anni dopo, utilizza l'API Web ASP.NET per pubblicare i tuoi dati e Angular (js o più recenti) per strutturare la tua app sul lato client. Se stai creando un sito statico, utilizza semplicemente ASP.NET MVC.