2012-06-12 288 views
23

Tengo una lista <> enlazada con algunos datos en la acción del controlador y quiero pasar esa lista <> a la vista para enlazar con DataGrid en Razor View.Cómo pasar la lista del controlador a la vista en MVC 3.

Soy nuevo en MVC.Cualquiera me puede ayudar a pasar y cómo acceder en View.

Gracias de antemano,

Balu

Respuesta

6

Puede utilizar el objeto dinámico ViewBag para pasar datos de controladores de Vistas.

Añadir lo siguiente a su controlador:

ViewBag.MyList = myList; 

A continuación, puede acces desde su punto de vista:

@ViewBag.MyList 

// e.g. 
@foreach (var item in ViewBag.MyList) { ... } 
+6

Ésta es la peor forma de datos se transmite desde el controlador para ver – archil

+0

Sí, pero es el más fácil como bien. –

+0

No estaría de acuerdo. Las cadenas mágicas con viewbag son más fáciles que las de Return View (modelo)? – archil

36

de datos que pasan a la vista es simple como pasar objeto de método. Echar un vistazo a Controller.View Method

protected internal ViewResult View(
    Object model 
) 

Algo como esto

//controller 

List<MyObject> list = new List<MyObject>(); 

return View(list); 


//view 

@model List<MyObject> 

// and property Model is type of List<MyObject> 

@foreach(var item in Model) 
{ 
    <span>@item.Name</span> 
} 
+2

Funcionó para mí cuando tenía '@ Model' en lugar de' @ model'. – jonas

+0

¿Qué sucede si desea enviar 2 listas separadas del controlador para ver? – Jogi

+0

Debería crear la clase ViewModel que tiene dos propiedades de lista y pasar la instancia de esa clase para ver – archil

3
  1. Crear un modelo que contiene la lista y otras cosas que usted necesita para la vista.

    Por ejemplo:

    public class MyModel 
    { 
        public List<string> _MyList { get; set; } 
    } 
    
  2. Desde el método de acción puso su lista deseada al modelo, _MyList propiedad, como:

    public ActionResult ArticleList(MyModel model) 
    { 
        model._MyList = new List<string>{"item1","item2","item3"}; 
        return PartialView(@"~/Views/Home/MyView.cshtml", model); 
    } 
    
  3. En el acceso al usuario ver el modelo de la siguiente manera

    @model MyModel 
    foreach (var item in Model) 
    { 
        <div>@item</div> 
    } 
    

Creo que lo ayudará para empezar.

8

Lo hice;

En el regulador:

public ActionResult Index() 
{ 
    var invoices = db.Invoices; 

    var categories = db.Categories.ToList(); 
    ViewData["MyData"] = categories; // Send this list to the view 

    return View(invoices.ToList()); 
} 

En vista:

@model IEnumerable<abc.Models.Invoice> 

@{ 
    ViewBag.Title = "Invoices"; 
} 

@{ 
    var categories = (List<Category>) ViewData["MyData"]; // Cast the list 
} 

@foreach (var c in @categories) // Print the list 
{ 
    @Html.Label(c.Name); 
} 

<table> 
    ... 
    @foreach (var item in Model) 
    { 
     ... 
    } 
</table> 

creo que sirve

+0

¿Qué sucede si desea enviar 2 listas separadas a View from Controller? – Jogi

+1

Hola @RehanKhan, creo que deberías hacer entonces 2 viewdata con 2 nombres diferentes. ViewData ["MyList1"] y ViewData ["MyList2"] Saludos cordiales. –

Cuestiones relacionadas