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

  1. 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'.

  2. 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.

Était-ce utile?

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).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top