2017-03-13 16 views
0

コードの最初のアプローチを使用して、EF足場でASP.net MVCアプリケーションを開発しています。剣道MultiSelectを使用しているビューの1つはアイテムをロードできません。実行時に、MultiSelectは "undefined"というテキストのみを表示します。剣道()にアイテムを読み込むことができません。MultiSelect

こちらのモデル

ここ
public class SessionStudent 
{ 
    public int SessionStudentID { get; set; } 


    public int SessionID { get; set; } 
    [Display(Name = "Session")] 
    public virtual Session Session { get; set; } 


    public IEnumerable<int> SelectedStudentIDs { get; set; } 
    public IEnumerable<Student> Student { get; set; } 


    public int GradeID { get; set; } 
    [Display(Name = "Grade")] 
    public virtual Grade Grade { get; set; } 
} 

はコントローラ

// GET: SessionStudents/Create 
    public ActionResult Create() 
    { 
     ViewBag.GradeID = new SelectList(db.Grades, "GradeID", "GradeName"); 
     ViewBag.SessionID = new SelectList(db.Sessions, "SessionID", "SessionName"); 
     ViewBag.StudentID = new SelectList(db.Students, "StudentID", "FName"); 
     return View(); 
    } 

    // POST: SessionStudents/Create 

    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Create([Bind(Include = "SessionStudentID,SessionID,GradeID")] SessionStudent sessionStudent) 
    { 
     if (ModelState.IsValid) 
     { 
      db.SessionStudents.Add(sessionStudent); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     ViewBag.GradeID = new SelectList(db.Grades, "GradeID", "GradeName", sessionStudent.GradeID); 
     ViewBag.SessionID = new SelectList(db.Sessions, "SessionID", "SessionName", sessionStudent.SessionID); 
     return View(sessionStudent); 
    } 

でGETとPOSTメソッドであり、ここで複数選択が、この中に任意の助けビュー

<div class="form-group"> 
     @Html.LabelFor(model => model.SessionStudentID, "StudentID", htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.Kendo().MultiSelectFor(model => model.SessionStudentID).BindTo((SelectList)ViewBag.StudentID).DataTextField("FName").DataValueField("StudentID").Name("SelectedStudentIDs") 



      @Html.ValidationMessageFor(model => model.SessionStudentID, "", new { @class = "text-danger" }) 
     </div> 
    </div> 

になっています非常に感謝しています。

答えて

0

問題は、SelectListの構成の誤解です。

あなたは

ViewBag.StudentID = new SelectList(db.Students, "StudentID", "FName"); 

とSelectListのを作成すると、「StudentID」と「します。FNameは」SelectListのではありませんアクセサフィールド名、db.Studentsコレクションにマッピングするフィールドです。 SelectListには、 "FName"と "StudentID"からマップされた "Text"と "Value"フィールドの項目がまだ含まれています。あなたはその後、

@Html.Kendo().MultiSelectFor(model => model.SessionStudentID) 
    .BindTo((SelectList)ViewBag.StudentID) 
    .DataTextField("FName") 
    .DataValueField("StudentID") 
    .Name("SelectedStudentIDs") 

に複数選択をバインドするとき

だから、あなたは、 『テキストフィールドなどと『します。FName値フィールドとしてStudentID』「とリストViewBag.StudentIDにバインド』と言っている。 BUT ViewBag.StudentIDは、テキストと値を定義で使用するSelectListです

DataTextFieldとDataValueField指定子を削除すると、それを修正する必要があります。その場合、MultiSelectForはデフォルトの "Text"と "Value"を使用します。

でない任意のEnumerableをBindTo()する場合にのみ、DataTextFieldとDataValueFieldを使用する必要があります。はTextとValueをアクセサとして使用します。つまり、db.StudentsをSelectListに変換しなかった場合ViewBag.StudentIDはIEnumerable、でした。バインドされた列挙可能なアイテムにアクセスするには、FalseとStudentIDを使用するようにMultiSelectに指示する必要があります。

+0

これは私の問題を解決しました。しかし、 公開IEnumerable SelectedStudentIDs {get;セット; } プロパティはnull値をとります。私は選択された生徒IDを保存することを期待しています。 – RAK

関連する問題