Si può certamente usare qualsiasi combinazione di rendering lato client e rendering lato server, ma mi raccomando di provare a combinare gli helper MVC di ASP.NET con le direttive AngularJS. All'inizio potrebbe sembrare una buona idea perché sei già abituato a usare quegli helper e non devi scrivere "raw html", ma sconfiggono alcuni degli scopi di ciò che le applicazioni lato client cercano di ottenere: separazione delle preoccupazioni, reattività, associazione dei dati e testabilità.
C'è sicuramente spazio per realizzare mini-SPA all'interno di un'applicazione web più grande e tradizionale, soprattutto se si sta convertendo un'applicazione legacy o se parti della più grande applicazione non hanno bisogno di una SPA o sono meglio servite senza di essa. Ma se hai intenzione di rendere una determinata pagina - o parte di pagina - sul client, allora compra completamente e lascia che AngularJS faccia ciò che sa fare.
Quindi diciamo che hai un modello di prodotti (un elenco enumerabile di) e vuoi renderlo presente sulla pagina in un elenco. Hai tre opzioni a cui posso pensare:
- Utilizzare un rasoio @ForEach e renderlo lato server, ma accettalo
la tua applicazione AngularJS sul lato client non conoscerà questo elenco
e non lo collegherà al suo modello
- Attendi fino a quando la pagina viene caricata e AngularJS si avvia, quindi crea un'API
chiamare l'applicazione MVC sul lato server per alcuni dati JSON e
incollalo nel modello. Usa ng-repeat per visualizzare la lista.
- Utilizzare il rasoio per serializzare il modello Prodotti sul server in alcuni
Stringa JSON e incorporala nel controller AngularJS che hai inviato
indietro. Usa ng-repeat per rendere l'elenco e sfruttare
associazione dati lato client.
L'ultima opzione è brutta. Non riesco a pensare a una buona ragione per questo, a meno che non ti serva l'associazione dati lato client e devi pagare per ogni chiamata API.
Il primo sarebbe utile se non hai bisogno di alcun binding di dati sul client (è un elenco di sola lettura) o hai bisogno di SEO.
Il secondo è il modo in cui lo farei nella maggior parte degli scenari. Hai deciso di utilizzare AngularJS per un motivo: lascia che faccia il suo lavoro.
Non utilizzare gli helper MVC solo perché sono lì. AngularJS fornisce le proprie direttive che fanno più o meno le stesse cose. E se hai bisogno di più, scrivi il tuo. Parte dell'utilizzo di un framework lato client è l'acquisizione della filosofia: il server è responsabile di roba server-y come autenticazione, convalida del server e fornitura di dati tramite un'API, e il client è responsabile di essere un'applicazione front-end. Mantieni le tue preoccupazioni separate.
Questo non significa che non sia possibile utilizzare ASP.NET MVC per il routing, l'autenticazione o la struttura generale della tua app. Tutto ciò che circonda le tue app AngularJS. Una volta all'interno di una mini-SPA, però, fallo nel modo SPA.
Questa è la filosofia che ho usato durante l'integrazione di ASP.NET MVC con AngularJS. L'MVC lato server è responsabile esclusivamente del rendering della pagina iniziale e, successivamente, fornisce un'API semi-RESTful. Utilizza ASP.NET MVC per instradare URL, autenticare e altri extra. Ma non c'è quasi nessun rasoio e sicuramente nessun aiutante HTML.