web-dev-qa-db-fra.com

Comment passer d'une liste de contrôleurs à la vue dans MVC 3

J'ai une liste <> liée à des données dans l'action Controller et je souhaite transmettre cette liste à View pour la lier à DataGrid en mode Razor.

Je suis nouveau sur MVC. Quelqu'un peut-il m'aider à passer et accéder à View?.

29
Balu

La transmission de données à la vue est simple: il suffit de transmettre un objet à une méthode. Jetez un oeil à Controller.View Method

protected internal ViewResult View(
    Object model
)

Quelque chose comme ça

//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>
}
43
archil

J'ai fait ça;

Dans le contrôleur:

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 vue:

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

J'espère que ça aide

9
Nelson Miranda

Vous pouvez utiliser l'objet dynamique ViewBag pour transmettre des données des contrôleurs aux vues.

Ajoutez les éléments suivants à votre contrôleur:

ViewBag.MyList = myList;

Ensuite, vous pouvez y accéder depuis votre vue:

@ViewBag.MyList

// e.g.
@foreach (var item in ViewBag.MyList) { ... }
6
Dennis Traub
  1. Créez un modèle contenant votre liste et les autres éléments dont vous avez besoin pour la vue.

    Par exemple:

    public class MyModel
    {
        public List<string> _MyList { get; set; }
    }
    
  2. A partir de la méthode action, mettez la liste de votre choix dans le modèle, _MyList propriété, comme:

    public ActionResult ArticleList(MyModel model)
    {
        model._MyList = new List<string>{"item1","item2","item3"};
        return PartialView(@"~/Views/Home/MyView.cshtml", model);
    }
    
  3. À votre avis, accédez au modèle comme suit

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

Je pense que cela aidera pour commencer.

3
Abu Zafor