2011-01-14 13 views
3

Ich habe versucht, die Best Practices für die Verwendung von asp.net mvc zu überprüfen und viele sagen, dass wir ViewData nie verwenden sollten. Ich habe dieses post gelesen und es scheint davon zu sein.Sollte ViewData niemals verwendet werden?

Ein Grund, warum ich ViewData verwenden kann, ist, wenn Sie nur einen Wert an die Ansicht übergeben wollen. Aber für mehr als einen Wert scheint es besser, ViewModels zu verwenden. Aber wenn sie als Teil des Rahmens einbezogen werden, sollten sie einige Vorteile und Vorteile haben.

In welchen Fällen sollte ich ViewData verwenden? Welche Best Practices sind zu beachten, wenn ViewData verwendet wird, damit es nicht missbraucht wird?

Antwort

3

Ich bevorzuge stark typisierte Ansicht Modelle von Anfang an. Ich bevorzuge den Mangel an "magischen Saiten", indem ich das mache.

Nie eine Regel für alle Situationen, aber das ist normalerweise der erste Ansatz, den ich nehme.

Güte

D

+0

magische Saiten können durch konstante Saiten vermieden werden .. nur sagen .. – Baz1nga

0

Zitat von Scot Gu (Link zur Quelle: nerddinnerbook)

Mit String-basierte Wörterbücher, da Tippfehler kann zu Fehlern führen, die wird nicht bei der Kompilierung abgefangen. Das un-typed ViewData Wörterbuch auch erfordert die Verwendung des "as" -Operators oder Casting bei Verwendung einer stark typisierten Sprache wie C# in einer Ansicht Vorlage.

0

Die Verwendung eines stark typisierten ViewPages in Paar mit einem stark typisierten Model oder ModelView ist eine perfekte Übung des ASP.NET MVC.

können Sie Viewdata verwenden, um zusätzliche Daten zu View zu übertragen, aber ich preffer Viewmodels, weil:

  1. Compile Zeitfehler vs Laufzeitfehler
  2. IntellySence Unterstützung
  3. Leicht
  4. keine magischen Saiten
  5. Refactoring
  6. HTML-Helfer zum Erstellen von Formularen mit Datenbindungen
0

Ich finde mich oft ViewData verwenden, wenn ich Daten an die aktuelle Anfrage über einige Basis-Controller oder Filter anhängen müssen. Normalerweise haben Masterseiten dynamischen Inhalt, der vom Server abgerufen werden muss, und anstatt das von der Ansicht zurückgegebene Modell zu ändern oder jedes in einem übergeordneten ViewModel zurückgegebene Modell zu umbrechen, kann ich einfach die zusätzlichen Daten in ViewData einfügen.

Um die Verwendung von Zeichenfolgen in meinen Ansichten zu vermeiden, platziere ich oft ein const-Feld in eine Controller-Klasse oder ähnliches und rufe das Feld in der Ansicht auf.

public abstract partial class BaseController : Controller 
{ 
    public const string MessagesViewDataKey = "Base.Messages"; 

    protected override void OnActionExecuted(ActionExecutedContext filterContext) { 
     if (filterContext != null && filterContext.Controller != null && !filterContext.IsChildAction) { 
      filterContext.Controller.ViewData[MessagesViewDataKey] = Messenger.MessageQueues; 
     } 

     base.OnActionExecuted(filterContext); 
    } 
} 

// site.master 
<% if (ViewData[BaseController.MessagesViewDataKey] != null) 
      Html.RenderPartial("DisplayTemplates/MessageList", ViewData[BaseController.MessagesViewDataKey]); %> 
0

Ich mag sie nicht, aber ich habe sie in einer Situation nützlich gefunden, wo ich auf allen Seiten eine Art von Nachricht an den Benutzer angezeigt werden soll.Ich habe zum Beispiel ein Benutzersteuerelement, das dem Benutzer Nachrichten anzeigt. Es ist auch in meiner Masterseite vorhanden. Es überprüft ViewData["messages"] und TempData["messages"] Und wenn einer dieser nicht null ist, zeigt es die Nachrichten, die vorhanden sind. Wenn sie beide null sind, tut es das nicht.

Dadurch kann ich verhindern, dass alle meine Modelle von einer Basisklasse erben müssen, die eine Nachrichteneigenschaft besitzt, und gibt mir mehr Flexibilität.

Verwandte Themen