2009-05-15 14 views
3

sehen Ich mag ein Array-Daten binden würde in ASP.NET MVC zu sehen, wie kann ich das tun?ASP.NET MVC, wie benutzerdefiniertes Modell binden

leid nicht über meine Frage klar. Gerade jetzt, ich creat ein benutzerdefiniertes Objekt (nicht-Array), habe ich versucht, es passieren Ansicht, aber der Fehler zeigt

„Das Modellelement in das Wörterbuch übergeben ist vom Typ‚Contact‘, aber dieses Wörterbuch erfordert ein Modell Artikel vom Typ ‚System.Collections.Generic.IEnumerable“

+0

Eric, die Fehlermeldung sagt genau was falsch ist. Sie übergeben es ein benutzerdefiniertes Objekt (kein Array), aber es erwartet eine generische Auflistung von Objekten. –

Antwort

6

können Sie die Viewdata [] verwenden, aber der beste Weg wäre, um tatsächlich eine Ansichtsklasse zu erstellen und zurück.

Sagen wir also die Ansicht, die Sie die Daten senden möchten, ist Kontakte genannt. Erstellen Sie eine neue View-Klasse und geben Sie diese zurück. so statt dessen:

public ActionResult Contacts(){ 
    ViewData["contacts"] = arrayOfContacts[]; 
    ... 
    return View(); 
} 

Sie erhalten stark typisierte Ansichten durch dies zu tun:

public class ContactsView(){ 
    Object[] ContactsList {get;set;} 
} 

public ActionResult Contacts(){ 
    ... 
    return View(new ContactsView(){ 
     ContactsList = arrayOfContacts[]; 
    }); 
} 

Dann in der aktuellen Ansicht, können Sie es stark durch die Annahme Objekte vom Typ ContactsView eingegeben werden. Auf diese Weise in der aktuellen Ansicht, haben erben es etwa so:

... Inherits="System.Web.Mvc.ViewPage<ContactsView>" ... 

dem Sie Ihre Array wie ... auf diese

Model.ContactsList 

im Gegensatz nennen können:

object[] arrayOfItems = (Object[])ViewData["theContactsList"]; 

In diesem Fall möchten Sie wahrscheinlich überprüfen, ob es nicht null ist usw. Der Vorteil davon ist, dass wenn Sie es umgestalten, es viel einfacher ist. Ganz zu schweigen von der Leichtigkeit und Typensicherheit stark typisierter Objekte.

+0

Entschuldigung für nicht klar über meine Frage. Momentan erstelle ich ein benutzerdefiniertes Objekt, ich habe versucht, es an View zu übergeben, aber der Fehler zeigt "Das an das Wörterbuch übergebene Modellelement ist vom Typ 'ContactView', aber dieses Wörterbuch benötigt ein Modellelement vom Typ 'System.Collections' .Generic.IEnumerable " – Smallville

+0

Es sieht so aus, als ob Sie beim Erstellen der Seite angegeben haben, dass sie stark von einer Art von IEnumerable (dh einer Liste, einem Wörterbuch usw.) getippt wird. Was sagt die erste Zeile Ihrer Ansicht? Es sollte etwas wie <% Page = "... ..." Inherits = "System.Web.MVC.ViewPage " ... /> sein. Es scheint wie es wahrscheinlich das Inherit Attribut hat wie etwas zu tun: Inherits = „System.Web.Mvc.ViewPage >“ – MunkiPhD

+0

+1 Dies ist eine sehr schöne Beschreibung. Es ist das einzige Beispiel, das ich gesehen habe, das alle Konventionen deutlich zeigt. –

0

Legen sie es in der Viewdata, und verwenden sie for..each eine Schleife durch das?

Verwandte Themen