2012-06-12 22 views
23

Ho una lista <> associata con alcuni dati in azione Controller e voglio passare quell'elenco <> a View per eseguire il binding con DataGrid in Razor View.Come passare l'elenco dal controller alla vista in MVC 3.

Sono nuovo su MVC. Qualcuno mi aiuta a passare e come accedere in Visualizza.

Grazie in anticipo,

Balu

risposta

6

È possibile utilizzare l'oggetto dinamico ViewBag per passare i dati da controllori a Vista.

Aggiungere il seguente al controllore:

ViewBag.MyList = myList; 

Quindi è possibile acces dalla tua vista:

@ViewBag.MyList 

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

Questo è il modo peggiore di dati viene passato dal regolatore per visualizzare – archil

+0

Sì, ma è il più facile da bene. –

+0

Non sarei d'accordo. Le stringhe magiche con il viewbag sono più facili del ritorno Visualizza (modello)? – archil

36

dati che passano alla vista è semplice come passare oggetto di metodo. Date un'occhiata a Controller.View Method

protected internal ViewResult View(
    Object model 
) 

Qualcosa di simile

//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

Ha funzionato per me quando avevo '@ Model' invece di' @ model'. – jonas

+0

E se si desidera inviare 2 elenchi separati dal controller per visualizzare? – Jogi

+0

Di quanto dovresti creare la classe ViewModel che ha due proprietà List e passare l'istanza di quella classe per visualizzare – archil

3
  1. Creare un modello che contiene la vostra lista e altre cose è necessario per la vista.

    Ad esempio:

    public class MyModel 
    { 
        public List<string> _MyList { get; set; } 
    } 
    
  2. Dal metodo di azione di mettere la vostra lista desiderata per il modello, _MyList proprietà, come:

    public ActionResult ArticleList(MyModel model) 
    { 
        model._MyList = new List<string>{"item1","item2","item3"}; 
        return PartialView(@"~/Views/Home/MyView.cshtml", model); 
    } 
    
  3. A l'accesso visualizzare il modello come segue

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

Penso che sarà d'aiuto per iniziare.

8

Ho fatto questo;

In regolatore:

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

In considerazione:

@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> 

Speranza che aiuta

+0

e se vuoi inviare 2 elenchi separati alla vista dal controller? – Jogi

+1

Ciao @RehanKhan, penso che dovresti fare due viewdata con 2 nomi diversi. ViewData ["MyList1"] e ViewData ["MyList2"] Cordiali saluti. –

Problemi correlati