2012-06-05 29 views
7

El problema es: quiero ejecutar 3 acciones diferentes, pero en lugar de eso quiero alimentar todos los datos de una sola acción en un modelo más grande.¿Cómo pasar múltiples modelos a la vista en ASP.NET MVC?

estoy usando:

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

estoy usando LINQ para agregar datos en estos modelos.

estoy usando:

 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 

Ésta es una forma que yo quiero para agregar datos a enlace y título de todas las clases.

Mi intento es para agregar datos a las 3 clases de diferentes fuentes y aprobar el modelo más grande para ver de modo que pueda acceder a todas las clases como:

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

Para sugerir una manera

Gracias

+4

crear un modelo de vista que une a los tres modelos juntos y escriba el fin de que la modelo de vista. – Brian

+0

¿No entiendo por qué tiene 3 clases diferentes que se ven todas iguales? ¿Por qué no usar 3 instancias diferentes de la misma clase? – hermiod

+0

@hermiod: Actaully la lógica que he mostrado es similar [poco modificada] pero las fuentes desde donde obtienen la URL y el contenido son diferentes. Entonces necesito diferentes clases. – Man8Blue

Respuesta

8

Para ampliar mi comentario, sugeriría crear una carpeta de ViewModel por el bien de la organización. en este añadir el modelo de vista

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

En su controlador continuación se ejemplariza el nuevo modelo de vista

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


} 

return view(model); 

continuación, en su opinión, agregue el uso para el modelo de vista.

@using SearchScrapClassViewModel 
+0

Podría elaborar en el lado de las vistas. ¿Cómo accedería a cada elemento w, s, y de forma individual en la vista? – Zapnologica

1

Puede pasar modelos múltiples creando una nueva clase de modelo que contendrá múltiples objetos.

public class MultiModel 
    { 
    SearchScrapClass searchScrap; 
    WClass wClass; 
    SClass sClass; 
    YClass yClass; 
    } 
+0

¿Y cómo recibe/usa esa clase en la vista? – Zapnologica

+0

Brian ha explicado esto más a fondo, puede usar Modal en vista para acceder a cada clase, p. @ Model.SearchScrapClass, Modal.WClasss –

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


} 

lo que la lógica que se aplican aquí ".... añadir en su lógica para llenar su clase de objetos aquí"

Cuestiones relacionadas