2012-06-05 8 views
7

Problem ist: Ich möchte 3 verschiedene Aktionen ausführen, aber stattdessen möchte ich alle Daten aus einer einzelnen Aktion in einem größeren Modell zugeführt.Wie mehrere Modelle in ASP.NET MVC angezeigt werden?

Ich verwende:

public class SearchScrapClass 
    { 
     public WClass WClass { get; set; } 
     public SClass SClass { get; set; } 
     public YClass YClass { get; set; } 
    } 

    public class WClass 
    { 
     public string title { get; set; } 
     public string link { get; set; } 
    } 
    public class SClass 
    { 
     public string title { get; set; } 
     public string link { get; set; } 
    } 
    public class YClass 
    { 
     public string title { get; set; } 
     public string link { get; set; } 
    } 

ich LINQ bin mit Daten in diesen Modellen hinzuzufügen.

Ich verwende:

 var wikians = from info in document.DocumentNode.SelectNodes("//div[@id='span']") 
     from link in info.SelectNodes("div//a").Where(x => x.Attributes.Contains("href")) 
     select new SearchScrapClass //Main Bigger Class 
     { 
      WClass.link= link.Attributes["href"].Value, //ERROR: How to add to WClass's url ? 
      WClass.title= link.InnerText //ERROR: How to add to WClass's url ? 
     } 


var wikians = from info in document.DocumentNode.SelectNodes("//div[@id='results']") 
       from link in info.SelectNodes("p//a").Where(x => x.Attributes.Contains("href")) 
       select new SearchScrapClass //Main Bigger Class 
       { 
        YClass.link= link.Attributes["href"].Value, //ERROR: How to add to YClass's url ? 
        YClass.title= link.InnerText //ERROR: How to add to YClass's url ? 
       } 

//Also for the 3rd class (model) 


    return View(wikians); //and then return bigger class model so that i can access them in view 

Dies ist ein Weg, ich will und Titel Verbindungsdaten hinzuzufügen aller Klassen.

Mein Versuch ist, Daten zu allen drei Klassen aus verschiedenen Quellen hinzufügen und das größere Modell übergeben, so zu sehen, dass ich alle Klassen als zugreifen:

@model SearchScrapClass 
@using(Html.BeginForm()) { 
    @Html.EditorFor(o => o.WClass.link) 
    ... 
} 

Bitte einem Weg

Dank vorschlagen

+4

ein Ansichtsmodell erstellen, die alle zusammen drei Modelle binden und den Blick auf dieses Ansichtsmodell geben. – Brian

+0

Ich bin verwirrt, warum Sie 3 verschiedene Klassen haben, die alle gleich aussehen? Warum nicht einfach 3 verschiedene Instanzen derselben Klasse verwenden? – hermiod

+0

@hermiod: Tatsächlich sieht die Logik, die ich gezeigt habe, ähnlich aus [wenig geändert], aber die Quellen, von denen sie URL und Inhalt abrufen, sind unterschiedlich. Also brauche ich verschiedene Klassen. – Man8Blue

Antwort

8

Um auf meinen Kommentar zu erweitern, würde ich vorschlagen, einen ViewModel-Ordner aus Gründen der Organisation zu erstellen. Dabei wird die Modellansicht hinzufügen

public class SearchScrapClassViewModel 
{ 
    SearchScrapClass searchScrap; 
    WClass wClass; 
    SClass sClass; 
    YClass yClass; 
} 

In Ihrem Controller dann instanziiert Sie das neue Viewmodel

SearchScrapClassViewModel model = new SearchScrapClassViewModel 
{ 
    ....add in your logic to fill your class objects here 


} 

return view(model); 

dann Ihre Ansicht nach der Verwendung für das Ansichtsmodell hinzuzufügen.

@using SearchScrapClassViewModel 
+0

Könnten Sie auf die Ansichten Seite näher ausführen. Wie würde ich auf jedes Element w, s, y einzeln in der Ansicht zugreifen? – Zapnologica

1

Sie können mehrere Modelle übergeben, indem Sie eine neue Modellklasse erstellen, die mehrere Objekte enthält.

+0

Und wie erhalten/verwenden Sie diese Klasse in der Ansicht? – Zapnologica

+0

Brian hat das weiter erklärt. Sie können Modal verwenden, um auf jede Klasse zuzugreifen, z. @ Model.SearchScrapClass, Modal.WClass –

0
SearchScrapClassViewModel model = new SearchScrapClassViewModel 
{ 
    ....add in your logic to fill your class objects here 


} 

welche Logik anwenden wir hier ".... in Ihrer Logik fügen Sie Ihre Klasse zu füllen Objekte hier"

Verwandte Themen