Domanda

Ho un jQuery DataTable configurato per l'elaborazione lato server contro un ASP.NET MVC server.

Per raggiungere progressive enhancement, una tabella HTML viene eseguito il rendering, e quindi aggiornato a un DataTable.Quando il DataTable fa una chiamata AJAX per recuperare più dati, si prevede che gli elementi di JSON restituito per correlare con la tabella esistente-layout di colonna.

Questo sembra a causa di alcuni architetti di attrito, perché:

Durante la prima fase di rendering della pagina:

  • Il Controller trasforma i dati del database in DTOs e stabilisce un Simbolo del modello.
  • Il ViewPage trasforma il ViewData modello in HTML con l'aiuto di HtmlHelper, etc.

Nel AJAX aggiornamenti:

  • Il Controller trasforma i dati del database nella tabella a cella dati, collegamenti ipertestuali, ecc.
  • Il DataTable rende i dati restituiti direttamente nelle celle della tabella.

Il punto qui è che il Controller è ora costretto a conoscenza circa il rendering di tabella di layout, quando si tratta di responsabilità dovrebbe essere limitato a passare indietro DTOs.

Qual è il corretto modello qui?Come faccio a supporto di chiamate AJAX e aderire al singolo la responsabilità principale nel controller?


Un po ' di chiarezza:

Il mio DTO ha tre proprietà:

public class AccountListing
{
    public int Id { get; set; }
    public string AccountCode { get; set; }
    public string AccountName { get; set; }
}

Il rendering DataTable quattro colonne:

+--------------+--------------+------+------+
| Account Code | Account Name | View | Edit |
+--------------+--------------+------+------+
| 12345        | FooBar Inc.  | Link | Link |
+--------------+--------------+------+------+

Il ViewPage rende il 3 proprietà DTO in una colonna 4 della tabella.Se il Controllore passa indietro le stesse 3 proprietà DTO come AJAX, JSON, i dati della tabella si lamenta che mancano le colonne...i dati della tabella si aspetta JSON restituito per rappresentare elementi cellulari, rispetto ai dati di origine.

Attualmente sto risolvendo questo utilizzando jQuery array trasforma e tabella personalizzata di rendering, che di fatto duplica la logica del ViewPage.

C'è qualche alternativa?

È stato utile?

Soluzione

La soluzione attuale (che fa il rendering sul lato client) audio buono con me.

La cosa è, il DTOs non corrispondono a ciò che le vostre pagine di visualizzazione del display.Il popolare modello è avere gli oggetti ViewModel per queste situazioni.

Per esempio :

public class AccountListingViewModel {
    public string AccountCode { get; set; }
    public string AccountName { get; set; }
    public string ViewLink { get; set; }
    public string EditLink { get; set; }
    public static AccountListingViewModel FromAccountListing(AccountListing o) {
        AccountListingViewModel returnObj = new AccountListingViewModel();
        //populate the properties from the parameter
        return returnObj;
    }
}

Vedere [visualizza], [model-view-viewmodel].

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top