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?.
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>
}
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
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) { ... }
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; }
}
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);
}
À 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.