Domanda

ho un sito web asp.net mvc dove costruisco la maggior parte della pagina utilizzando C # per esempio la costruzione di tabelle html dato un insieme di dati dal mio ViewModel

ho anche un sacco di javascript che modifica quindi dynamcially queste tabelle (Aggiungi riga per esempio).

il codice javascript per aggiungere una nuova riga sembra estremamente simile al mio codice "rendering" che ho in C # che viene utilizzato per costruire la tabella HTML, in primo luogo.

Ogni volta che cambio il codice C # per un aggiungere un nuovo campo, devo ricordarsi di tornare al codice javascript per fare lo stesso.

c'è un modo migliore qui?

È stato utile?

Soluzione

Un modo per farlo è quello di esporre la logica che genera il markup come un servizio Web sul server e avere JavaScript ottenere che markup tramite una chiamata AJAX, piuttosto che duplicare la logica.

In questo modo è possibile chiamare qualcosa di simile a un metodo CreateRow da JavaScript che effettivamente invocare la stessa logica esatto che si è utilizzato sul server quando si rese la pagina.

Altri suggerimenti

Guarda l'articolo di Scott Gu: ASP.NET MVC 2: Model Validation

In sostanza, si definiscono le convalide a livello di proprietà del modello, e ASP.NET MVC 2 possibile generare automaticamente la corretta validazione lato client pure.

Purtroppo, questo può significare che dovrete refactoring tutto in MVC, ma un sacco di ppl qui sarebbe probabilmente vedere che come un plus.

(disclaimer: Non ho lavorato con ASP.NET MVC a tutti)

A differenza di risposta accettata e popolare da @Andrew Hare. Avrei preferito implementare la generazione di markup solo in javascript (e riutilizzare che per la costruzione di tabelle HTML) che implementa markup solo in C # (se javascript deve tale funzionalità anche, naturalmente).

A causa:

  1. JavaScript è è meglio di C # per HTML, perché può modificare il DOM già reso. Quindi, con JavaScript si può fare molto di più che semplicemente HTML statico. E forse non è necessario ora, ma al giorno d'oggi non sono rari i requisiti che mirano per l'applicazione diventare più simile a una Rich Internet Application.
  2. chiamate AJAX sono più probabilità di essere più lento rispetto l'attuazione Javascript peggiore che gestisce i dati sul lato server e trasforma questo in nuove righe di una tabella esistente. E anche più lento di arrivare al tavolo da zero in Javascript.
  3. richieste Meno server (e più requisiti lato client, ma che di solito non è un problema).
  4. C'è un diversi ottimi framework JavaScript che rendono le tabelle veramente bello (e molto altro).

So che ASP.NET MVC ha un sacco di bei esempi su come utilizzare gli helper HTML per i controlli, con conseguente sviluppo pulito e veloce. Ma se si finisce per creare funzioni Javascript in ogni caso, allora penso che si dovrebbe prendere in considerazione di nuovo la separazione degli argomenti, e bastone con Javascript e scartare la duplicazione nelle Helpers HTML.

A causa ampliando le funzioni JavaScript per creare l'intera tabella, se si stanno già creando le righe non dovrebbe essere così difficile immagino. Ecco un'idea di come passare i dati a JavaScript e quindi utilizzando la funzione "createRow" che hai già in Javascript:

<script>
    var data = [];
    <% foreach (var item in Model) { %>
        data.push({
            Id: <%= Html.Encode(item.Id) %>
            , Title: <%= Html.Encode(item.Title) %>
        });
    <% } %> 
    createTableHeader();
    for (var i = 0; i < data.length; i++) {
        createRow(data[i]);
    }
    createTableFooter();
</script>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top