MVC Comment passer d'une liste d'objets avec des Éléments de la Liste de POSTES de la méthode d'action
Je veux afficher une Liste des éléments de contrôleur de Rasoir vue , mais j'obtiens une Liste d'objets comme nulle
Ma classe structre est
Modèle:
List<Subjects> modelItem
class Subjects
{
int SubId{get;set;}
string Name{get;set;}
List<Students> StudentEntires{get;set;}
}
class StudentEntires
{
int StudId{get;set;}
string Name{get;set;}
int Mark{get;set;}
}
Le modèle lui-même est une liste d'éléments et de tous les éléments contiennent la Liste des éléments enfants. Exemple de modèle est une liste de Sujets et de chaque objet contient une Liste d'Étudiants, et je tiens à l'entrée de la marque pour chaque élève
Mon point de Vue, c'est comme
@model IList<Subjects>
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
if (Model.Count > 0)
{
@for (int item = 0; item < Model.Count(); item++)
{
<b>@Model[item].Name</b><br />
@foreach (StudentEntires markItem in Model[item].StudentEntires)
{
@Html.TextBoxFor(modelItem => markItem.Mark)
}
}
<p style="text-align:center">
<input type="submit" class="btn btn-primary" value="Update" />
</p>
}
}
Et contrôleur de
[HttpPost]
public ActionResult OptionalMarks(int Id,ICollection<Subjects> model)
{
//BUt my model is null. Any idea about this?
}
comment êtes-vous d'envoyer le modèle de la vue dans la
Oui exactement. D'abord trouver une liste des sujets et pour chacun des sujets , obtenir une liste des étudiants
OptionalMarks
méthode GET?Oui exactement. D'abord trouver une liste des sujets et pour chacun des sujets , obtenir une liste des étudiants
OriginalL'auteur Jibin Mathew | 2014-01-11
Vous devez vous connecter pour publier un commentaire.
Vous trouvez cela difficile, parce que vous n'êtes pas en utilisant toute la puissance du framework MVC, alors permettez-moi de fournir un exemple.
Tout d'abord, nous allons créer une vue de modèle pour encapsuler votre point de vue des besoins en données:
Ensuite, créez une classe pour représenter votre sujet modèle:
Enfin, une classe pour représenter un étudiant:
À ce stade, vous disposez de toutes les classes dont vous avez besoin pour représenter vos données. Maintenant, nous allons créer deux actions du contrôleur, y compris des exemples de données de sorte que vous pouvez voir comment cela fonctionne:
Maintenant, il est temps de construire les points de vue, et cette partie est particulièrement important quand il s'agit de l'envoi de données vers un contrôleur. Le premier est le
Index
vue:Vous remarquerez que je suis tout simplement à l'aide de
Html.EditorFor
, tout en passantSubjects
en tant que paramètre. La raison pour laquelle je le fais c'est parce que nous allons créer unEditorTemplate
pour représenter unSubject
. Je vais vous expliquer plus tard. Pour l'instant, il suffit de savoir queEditorTemplates
etDisplayTemplates
spéciaux sont les noms de dossier dans MVC, leurs noms et les emplacements sont importants.Nous allons créer deux modèles: l'un pour
Subject
et un pourStudent
. Pour ce faire, procédez comme suit:EditorTemplates
dossier à l'intérieur de votre point de vue actuel du dossier (par exemple, si votre vue estHome\Index.cshtml
, créer le dossierHome\EditorTemplates
).Subject.cshtml
etStudent.cshtml
, respectivement (encore une fois, la désignation est important)).Subject.cshtml
devrait ressembler à ceci:Student.cshtml
devrait ressembler à ceci:Que c'est. Maintenant, si vous générez et exécutez cette application, mettant un point d'arrêt sur la
POST
action index, vous verrez le modèle est correctement remplie.Alors, quelles sont
EditorTemplates
, et de leurs homologues,DisplayTemplates
? Ils vous permettent de créer réutilisables portions de points de vue, vous permettant d'organiser votre point de vue un peu plus.La grande chose à leur sujet est basé sur un modèle aides, c'est-à
Html.EditorFor
etHtml.DisplayFor
, sont assez intelligent pour savoir quand ils traitent d'un modèle de collection. Cela signifie que vous n'avez plus à boucle sur les éléments manuellement, en invoquant un modèle à chaque fois. Vous pouvez aussi ne pas avoir à effectuer toutenull
ouCount()
vérification, parce que les assistants se débrouillera pour vous. Vous êtes de gauche avec des points de vue qui sont propres et exempts de logique.EditorTemplates
également de générer des noms appropriés quand vous voulez POSTER des collections à l'action d'un contrôleur. Qui fait la liaison de modèle à une liste beaucoup, beaucoup plus simple que de générer ces noms vous-même. Il y a des moments où vous souhaitez toujours avoir à le faire, mais ce n'est pas l'un d'eux.OriginalL'auteur John H
Changement de la méthode d'action de la signature de
public ActionResult OptionalMarks(ICollection<Subjects> model)
Depuis dans votre code HTML, il ne ressemble pas il y a quelque chose nommé
Id
. Ce n'est pas votre principal problème.Ensuite, effectuer les opérations suivantes avec la foor boucle
Peut-être due à l'utilisation d'un
foreach
boucle pour laStudentEntries
, le modèle de liaison est d'avoir de la difficulté à assembler le tout, et donc une valeur NULL est retournée.EDIT:
Voici un exemple:
Contrôleur
Vue
Lorsque vous validez le formulaire, vous devez voir les données de revenir dans le
viewModel
objet.OriginalL'auteur Jason Evans