Frage

Ich habe ein jQuery Table Konfiguriert für serverseitige Verarbeitung gegen einen ASP.NET MVC-Server.

progressive Verbesserung zu erreichen, eine HTML-Tabelle gerendert wird, und dann zu einem Datatable aktualisiert. Wenn die Datatable einen AJAX-Aufruf macht mehr Daten abgerufen werden, es Elemente des zurückgegebenen JSON Korrelat mit der vorhandenen Tabelle-Spalten-Layout erwartet.

Das scheint eine gewisse architektonische Reibung zu verursachen, weil:

Während der ersten Seite Rendering:

  • Die Steuerung wandelt Datenbankdaten in DTOs und stellt ein Viewdata-Modell.
  • Der View verwandelt das Viewdata-Modell in HTML mit Hilfe von Htmlhelper, usw.

Duriung AJAX-Updates:

  • Die Steuerung wandelt Datenbankdaten in Tabellenzellendaten, mit Hyperlinks, etc.
  • Die Datatable macht die zurückgegebenen Daten direkt in die Tabellenzellen.

Der Punkt hier ist, dass der Controller nun in zu wissen, über die Tabelle Rendering Layout gezwungen wird, wenn es in der Verantwortung sollte , um vorbei zurück DTOs begrenzt werden.

Was sind die richtig Muster hier? Wie kann ich AJAX Anrufe und sich an die Einzelverantwortung Haupt im Controller unterstützen?


Einige Klarheit:

Meine DTO hat drei Eigenschaften:

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

Die gerenderte Datentabelle hat vier Spalten:

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

Der View macht die 3 Eigenschaft DTO in einen 4 Säulentisch. Wenn der Controller die gleiche Eigenschaft 3 DTO wie AJAX JSON geht zurück, wirft die Datentabelle über fehlende Spalten ... die Datentabelle den zurück JSON erwartet Zelle Elemente darzustellen, als zu Quelldaten gegenüber.

Aktuell mit jQuery Array-Transformationen und benutzerdefinierte Tabelle Rendering ich die Lösung, die effektiv die Logik des View dupliziert.

Gibt es eine Alternative?

War es hilfreich?

Lösung

Ihre aktuelle Lösung (tut das Rendering auf der Client-Seite) Ton gut zu mir.

Die Sache ist, Ihre DTOs haben nicht zu entsprechen, was Ihre Ansicht Seiten anzuzeigen. Das beliebte Muster wird mit Ansichtsmodell für diese Situationen Objekte.

Zum Beispiel:

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;
    }
}

Siehe [Viewmodel] , [Model view Viewmodel] .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top