1

ASP.NET MVC 3 Editor Template のこの投稿IEnumerable モデル プロパティと同様に、私は持っています

モデル

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

表示 - 学生の編集

@model Student

@Html.TextBoxFor(m => m.StudentName)

//I get the error for following..see below
@Html.EditorFor(m => m.Classes);

学生/編集者テンプレート/クラス

@model Class

<div>
    @*checkbox here*@
    @Html.LabelFor(x => x.ClassName)
</div>

コントローラ

public ActionResult EditStudent(int id)
{
    ViewBag.Classes = repository.GetClasses();
    Student student = repository.GetStudent(id);

    return View("EditStudent", student);
}
  1. ステートメント @Html.EditorFor(m => m.Classes) のビューのエラー。は..

    ディクショナリに渡されるモデル アイテムのタイプは 'System.Collections.Generic.HashSet`1[Class]' ですが、このディクショナリにはタイプ 'Class' のモデル アイテムが必要です。

  2. 基本的に、私が達成しようとしているのは、利用可能なすべてのクラスのリストを表示し、その横にチェックボックスを付けることです (コードのその部分にはまだ到達していません)。次に、生徒が登録されているすべてのクラスを確認し、選択を変更できるようにします。

    • 指定されたモデルでチェックボックスのリストを表示するにはどうすればよいですか。
    • EditorTemplate を ViewBag.Classes (どのように) にバインドする必要がありますか?
    • Post ActionMethod で選択したチェックボックスの値も取得する必要があります。
    • CheckBoxListHelper の作成を提案するいくつかの投稿を読みましたが、単純なリストを表示する必要があるため、EditorTemplate で実行できるはずです。

提案してください。ありがとう。

4

1 に答える 1

1

わかりました。ここの非常に正確な投稿のおかげで

IEnumerable<MyModel> の EditorTemplate を提供する方法は?

まず、EditorTemplate の名前を StudentClass に変更しました。これがバインディングと関係があるかどうかはわかりませんが、そうしました。

次に、EditorTemplate を変更して 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
}

そして、名前でテンプレートを呼び出します

@Html.EditorFor(m => m.Classes, "StudentClass"); 

コントローラーの Post メソッドで、クラスの配列 (チェックボックスの名前) を取得できます。

于 2012-01-31T19:29:14.260 に答える