2016-05-04 19 views
0

Ich habe vor kurzem eine Ausbildung in ASP.NET MVC abgeschlossen und brauche einige Richtlinien und gute Ratschläge.JSON anstelle von Modellen

Wenn ich muß die Daten aus mehreren Modellen, ich habe gelernt, View Models, zu bauen, aber vor kurzem hörte ich, dass statt View Models es besser ist, JSON Objekte zu verwenden und das Objekt als ein Modell zum View zurückkehren oder einfach nur die Daten aller Suche von das JSON Objekt von der Controller über AJAX ruft die View an und zeigt dann die Daten mit jQuery innerhalb der HTML an.

Ist dies der beste Weg heute anstelle von gemeinsamen View Models und Aktualisieren der Seite mit POST/GET-Anfragen in der URL?

In der Controller, erstelle ich ein JSON Objekt und fülle es mit Daten wie eine Liste für jede Model oder wie funktioniert es?

+2

Die Antwort darauf ist, * es kommt darauf an *. Manchmal ist es nützlich, Client-Seite zu binden, manchmal nicht. Ganze Bücher haben und können zu diesem Thema geschrieben werden – Liam

+1

Darüber hinaus können Sie diese beiden Ansätze kombinieren – eternity

+0

@Liam OK, ich war nur neugierig zu hören, was andere Entwickler über dieses Thema dachte und wie sie funktionieren und ich wollte auch mehr darüber erfahren . –

Antwort

-1

Verwenden Sie den Web-API-Controller anstelle des MVC-Controllers.

Der Mvc-Controller gibt gerenderte Ansichten zurück, sofern Sie nicht anders angegeben haben. Sie können Objekt auf Entitätsframework nicht zurückgeben, da zyklische Referenzen Sie also dtos haben sollten.

Allerdings wird Web-API-Controller diese Operationen ohne dto. plus Sie können query string parameter dann erstellen Sie erhalten Ihre jsons

+1

Das ist nicht wahr.Es gibt nicht viel mehr, was ein Web-API-Controller tun kann, was ein MVC-Controller nicht kann. Sie verwenden grundsätzlich die gleiche Technologie unter der Haube. * Sie können Objekt auf Entitätsframework nicht zurückgeben, da zyklische Referenzen * Ich würde vorschlagen, dass Ihre EF falsch eingerichtet ist, wenn Sie diese Probleme haben. – Liam

0

Ich hängt von Ihrem Bedarf tatsächlich ab. Tatsächlich sind alle Ihre Gedanken korrekt und könnten entsprechend den Kontextanforderungen verwendet werden.

Zum Beispiel; Wenn Sie geradlinige CRUD-Operationen ausführen müssen, können Sie nur ein Ansichtsmodell verwenden und an das Formular binden. Wenn Sie komplexere Strukturen benötigen, können Sie zusammengesetzte Ansichtsmodelle erstellen, die mehr als ein Ansichtsmodell enthalten, und Sie können weiterhin das Standardmodellverhalten verwenden. Darüber hinaus können Sie ViewBag/ViewData-Dictionary-Objekte verwenden, um Daten an Ansichten weiterzugeben.

Wenn Sie async Bedürfnisse benötigen, können Sie AJAX verwenden (Get/Post) ruft

0

Ich könnte der alten Schule, aber ich versuche view models so viel wie möglich zu verwenden. Was ich normalerweise tun, ist die Ansicht Modell in meinem Controller Aktionsmethode zu füllen und dann weitergeben dieser Ansicht Modell zur Ansicht:

public async Task<ActionResult> Details(int brandId) 
{ 
    BrandViewModel model = await brandTask.DetailsAsync(brandId); 
    if (model == null) 
    { 
      throw new HttpException(404, "404"); 
    } 

    return View(model); 
} 

Es gibt Zeiten, die ich brauche, wird zunächst eine Seite zu laden und dann bestimmte Kontrollen bevöl mit Daten durch die Rückgabe von Daten im Format JSON. Vor einiger Zeit arbeitete ich an einem Projekt, bei dem ich eine datatable mit JSON-Daten zu füllen benötigt, nachdem das Formular geladen wurde:

public ActionResult GetApplicationNotes(DataTableParameterViewModel parameterViewModel, int id) 
{ 
    IEnumerable<Note> notes = noteService.FindAllByApplicationId(id); 

    var result = 
      from note 
      in notes 
      orderby note.Id descending 
      select new[] 
      { 
       note.Body, 
       note.CreatedDate.FormatDate() 
      }; 

    return Json(new 
    { 
      sEcho = parameterViewModel.sEcho, 
      iTotalRecords = notes.Count(), 
      iTotalDisplayRecords = notes.Count(), 
      aaData = result 
    }, 
    JsonRequestBehavior.AllowGet); 
} 

Es geht alles nach unten, was Sie brauchen in Ihrem Szenario zu erreichen. Wenn ich nichts Besonderes machen muss, werde ich immer zuerst Ansichtsmodelle verwenden. Wenn ich bestimmte Teile einer Webseite aktualisieren muss, mache ich einen AJAX Aufruf und gebe Daten im JSON Format zurück.

Verwandte Themen