Propriété iEnumerable avec MVC3 EditTorteTemplate
-
14-11-2019 - |
Question
Semblable à ce message propriété de modèle iEnumerable Dans un modèle d'éditeur ASP.NET MVC 3 , j'ai
modèle
public class Student
{
public int StudentId { get; set; }
public string StudentName{ get; set; }
//FYI..Its virtual because of EF relationship
public virtual ICollection<Class> Classes{ get; set; }
}
public class Class
{
public int ClassId { get; set; }
public string ClassName{ get; set; }
}
Vue - EditStudent
@model Student
@Html.TextBoxFor(m => m.StudentName)
//I get the error for following..see below
@Html.EditorFor(m => m.Classes);
Étudiant / EditTorTemplates / Class
@model Class
<div>
@*checkbox here*@
@Html.LabelFor(x => x.ClassName)
</div>
contrôleur
public ActionResult EditStudent(int id)
{
ViewBag.Classes = repository.GetClasses();
Student student = repository.GetStudent(id);
return View("EditStudent", student);
}
-
erreur en vue sur l'instruction @ html.editororfor (m=> m.classes); est ..
L'élément de modèle passe dans le dictionnaire est de type 'System.Collections.Generic.HashSet`1 [Classe]', mais ce dictionnaire nécessitait un modèle de type 'classe'.
-
Fondamentalement, ce que j'essaie d'obtenir est d'afficher la liste de toutes les classes disponibles avec une case à cocher à côté (je n'ai pas encore été atteint dans cette partie du code). Ensuite, vérifiez que toutes les classes à un étudiant sont inscrites et permettent de modifier les sélections.
- Comment afficher la liste des cases à cocher avec le modèle donné.
- dois-je lier ma plaque d'éditeurs avec ViewBag.Classes (comment?) Ou?
- J'ai besoin d'obtenir des valeurs de case à cocher sélectionnées dans Post ActionMethod.
- J'ai lu des messages celles-ci suggèrent de créer CatégorieBoxListhelper, mais il devrait être possible de faire avec EditTorTemplate, car je dois afficher une liste simple.
S'il vous plaît suggérer. Merci.
La solution
D'accord, je l'ai compris.Merci à un message très précis ici
Comment fournir une plaque d'éditeurs pour iEnumerable
Premièrement, j'ai renommé la plaque d'éditeur à StudentClass - je ne sais pas si cela a quelque chose à voir avec la liaison ou non, mais je l'ai fait.
seconde, modifiée EditTorteTemplate pour se lier avec iEnumerable
@model IEnumerable<Class>
var checked = "";
@foreach (Class class in ViewBag.Classes)
{
if (Model != null)
{
Class class = Model.FirstOrDefault(c => c.ClassId.Equals(class.ClassId));
if (class != null)
{
checked = "checked=checked";
}
}
<input type="checkbox" name="Classes" value="@class.ClassId" @checked />
@class.ClassName
}
et j'appelle le modèle avec nom
@Html.EditorFor(m => m.Classes, "StudentClass");
Maintenant, dans la méthode postale du contrôleur, je peux obtenir la matrimonie de classes (nom des cases à cocher).