Ciao :)
parto dal rispondere alla tua ultima domanda:
Non sta di sicuro a me stabilire se il tuo è il (tuo appunto...) modo migliore di procedere, credo che ognuno abbia il suo e lo conosca bene, e se dopo oltre un decennio sei ancora in piedi e fai questo mestiere... beh forse hai già un buon metodo di procedere... L'unica cosa che mi sento di raccomandarti è di non fraintendermi quando ti dico che siccome provieni da asp questo si sposa bene, perché con questo non intendo dire che lavorerai veramente come con asp, dovrai comunque prima o poi staccarti da asp e dal suo modo di lavorare, intendo dire che (secondo me) questo ti da maggiore controllo sull'output come con asp (confrontato ad usare controlli lato server tipo datagrid ecc.), ma saranno due cose molto diverse.
La tua prima domanda in realtà ho dovuto leggerla più volte perché non capivo cosa esattamente mi stavi domandando, e sai perché?!? Perché non ero entrato in modalità "asp classic" :D sono almeno dieci anni che non programmo con il mio grande amico classic (io lo adorato!) e non mi veniva più naturale pensare in quel modo... ma vediamo se ho capito bene:
Dunque, in asp quando volevi visualizzare dei dati "freschi" andavi a chiamare ad esempio la pagina "clienti.asp", essa veniva elaborata dal server in base a dell'input (session; cookies; url; ecc..) ed in base a dei dati e funzioni che risiedevano sul server, il server restituiva una risposta in puro html, e qualche volta aggingeva javascript e/o comunque elementi html ecc. "roba client". Ovviamente ancora la rete gira in questo modo, ma l'attenzione si sta rivolgendo sempre di più alle possibilità del multi-piattaforma. Vista la natura dei nuovi device in commercio, ovvero quella della connessione in mobilità, e quindi la conseguente necessità di fornire a questi degli endpoint condivisi con altre piattaforme, è molto sentita, ne consegue che si rende necessaria una netta separazione tra quelli che sono i client, e ciò che devono fare i server. Quando dico "client" non necessariamente intendo browser.
Quindi anziché ragionare in termini client->server->client (in avanzamento), immagina più come un client<->server, ovvero uno scambio continuo di informazioni, ma senza "cambiare pagina" (quindi senza ricaricare il client o perlomeno senza farlo troppo spesso!) Cerco di spiegarmi meglio :
Sicuramente in asp ti sarà capitato di "riempire" una select con dei cicli nel server, dopo di che sputavi fuori html. Probabilmente se si trattava di una select che dava il via ad altre select (del tipo stato-regioni-città ecc.) non inviavi tutti i dati per tutte le select, ma immagino che usassi chiamare una pagina .asp tramite ajax con ad esempio la regione selezionata, ottenendo così tutte le città di detta regione nella seguente select. Bene vedila nello stesso modo, ma con una differenza: non chiami una pagina in background, ma chiami dei "metodi" che ti restituiscono qualcosa di simile a ciò che tu avresti restituito con una pagina.asp, ovviamente elaborandola allo stesso modo ed ottenendo l'input dell'utente tramite (anche) i parametri passati al metodo. Questi metodi possono stare anche dentro una unica pagina asp.net (come nel precedente esempio), ma è consigliabile creare una "classe" separata che li ospita, questo può essere fatto anche tramite la creazione di un servizio web, che a sua volta può essere di diversa natura, ad esempio WebApi o WCF ecc.
Per il momento facciamo solo dentro la stessa pagina aspx (o eventualmente anche in più pagine, ma...) senza usare WebAPI o simili, questo dovrebbe scaricarti un po da diversa roba, ma prima o poi dovrai vedere anche quelli.
Quindi ricapitolando: quando tu chiami GetMezzi(), è come se chiamassi citta.asp (come con la select) ma in background, quindi l'elaborazione "lato server" (diciamo il contenuto lato server della pagina.asp che avresti chiamato) la devi fare dentro il metodo GetMezzi() della pagina aspx, una volta elaborato devi restituire il risultato, ma lo fai sotto forma di lista di oggetti NET (la classe "Mezzo") che puoi generare come meglio credi. se ti dovesse servire avere dell'input dal client, come ad esempio scelte effettuate; filtri; ecc., li puoi passare come argomenti del metodo (ad esempio crei GetMezzo(string query), quindi accetta un parametro query e con quello esegui la query sul database). Dovresti prendere i dati dal database e per ogni "riga" da restituire dovresti generare un nuovo oggetto di tipo "Mezzo" le cui proprietà prenderanno il valore da ogni colonna che vuoi esporre (esempio targa; nome; ecc.), dopo metti tutto in un lista e restituisci al client chiamante (ricorda che tutto ciò avviene in background non chiamando davvero altre pagine), una volta li potrai elaborarli con jquery. Tutto questo lavoro di "creazione" del risultato da restituire lo potresti eliminare se usassi Entity Framework, ma qui ti dico anche io: "facciamo un passo alla volta". Ovviamente il lavoro della creazione dei controlli html senza associare (binding) i controlli stessi (tipo template) diventa enorme! ecco perché knockout (o comunque qualcosa che agevoli il lavoro come webform o MVC o simili), si tratta di evitare di fare anche gli aggiornamenti a mano... ah perché una cosa su cui dovresti lavorare (sempre immaginando la provenienza asp) è il concetto di stato diciamo "lato client", che sostanzialmente in asp non esisteva. In pratica parlo della possibilità da parte del client di mantenere uno stato dei dati che risiede solo li, ad esempio come nella select multipla: lo stato di quei dati esisterebbe solo a livello client se non fosse che il server ne viene a conoscenza quando richiedi la pagina asp per le successive select, ma prova ad immaginare se la richiesta partisse solo alla pressione di un bottone e non automaticamente alla selezione, in quel caso avresti uno stato sul client (che il server non conosce), ovvero lo stato delle select (cosa ho selezionato?). Ecco! incomincia a pensare di più ad uno stato client "perenne" (o quasi), dove le informazioni sono aggiornate in background con i risultati provenienti dai metodi come GetMezzi() (che ti ricordo sarebbero come la pagina.asp chiamata con ajax per aggiornare le select).
Quindi: creazione degli elementi del DOM dal client stesso, non sarà più il server a scrivere gli elementi html ma sarai tu (o knockout) a farlo, ecco perché hai il controllo assoluto! ed in base ai dati ricevuti tramite i metodi chiamati in backgroung (senza postBack con refresh di pagina) sul server potrai fare tutte le elaborazioni che vorrai, come ad esempio interfacciarti al database.
Per la seconda domanda: purtroppo non ho un esempio più specifico a portata di mano, ma se riesco te lo creo a breve. Dovrei più che altro adattarlo a te e non ho ancora inquadrato bene il tuo livello con NET e con jquery e html5 (quindi parlami per permettermi di aiutarti al meglio ;)). Quelli che ho al momento sottomano credo che sarebbero troppo complessi perché richiederebbero qualche nozione in più di quella che credo tu abbia in campo NET. Scusami per la franchezza, e se mi sarò sbagliato ti chiederò di nuovo scusa.
Per la terza: In alcuni casi ti do pienamente ragione, ma mi domando se veramente ne avresti voglia di creare davvero TUTTO a mano, può darsi di si, ma in quel caso sappi che dovrai comunque vedertela con il DOM e la sua creazione dinamica. E la cosa diventerebbe molto più pesante se solo pensassi che alcuni strumenti (come ad esempio knockout e/o brezee ecc., solo per citarne alcuni) fanno quello che faresti tu, e forse anche di più...
Ad esempio per sostituire questo :
<input data-bind="value: $data.MezzoSelezionato() != null ? $data.MezzoSelezionato().Targa : 'Nessuno'"/>
dovresti dapprima controllare se esiste una selezione non nulla in una select, se questa non c'è dovresti inserire un valore di default, scrivere il valore nel campo, poi creare una sottoscrizione al dom per il cambio di valore, quando ciò avviene andare di nuovo a controllare se il valore è nullo, se non lo è allora scrivi il valore della selezione, diversamente scrivi "nessuno" ecc. e quando dico il valore in realtà intendo una classe, quindi fare tutto ciò su svariate proprietà, non solo sulla targa! senza contare ad esempio quanto dovresti scrivere per caricare di valori tutti gli elementi del DOM che compongono la pagina... a quel punto tanto vale stare su asp, fai meno ma sei molto più produttivo. comunque vedi tu, questo deve essere deciso anche in base anche alle tue conoscenze dei linguaggi lato client.
Oppure, se ti trovi meglio lato server, puoi incominciare a pensare ai metodi (come nell'esempio SetMezzo o GetMezzi) come se fossero le funzioni che chiami in asp, solo che li chiami quando servono, ad esempio anche se devi fare 2+2 sul client, puoi sempre chiamare in background il server predisponendo il metodo (ad esempio) int add(int a, int b) e far fare il calcolo a lui (il server), passandoli solo i parametri "a" e "b". Francamente ti sconsiglio di abusare del server, ma dipende anche da dove vuoi spostare il carico di lavoro.
Per il resto: figurati! ;)
Spero di non averti tediato troppo, e sopratutto di non averti offeso in qualche modo.
A presto.