2017-03-13 5 views
0

코드 첫 번째 방법을 사용하여 EF 스캐 폴딩을 사용하여 ASP.net MVC 응용 프로그램을 개발 중입니다. Kendo MultiSelect를 사용하는보기 중 하나가 항목을로드 할 수 없습니다. 런타임에 MultiSelect는 "정의되지 않은"텍스트 만 표시합니다.Kendo()에 항목을로드 할 수 없습니다. 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); 
    } 

그리고 여기에 뷰

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

"StudentID"와 "FNAME"와 selectList의를 만들

는 db.Students 컬렉션에서 매핑 필드, selectList의에서 하지 접근 필드의 이름입니다. SelectList에는 여전히 "FName"및 "StudentID"에서 매핑 된 "텍스트"및 "값"필드가있는 항목이 포함됩니다.

그래서, 당신은 다음

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

당신은 값 필드로 StudentID ""텍스트 필드와 같은 "FNAME"와 목록 ViewBag.StudentID에 바인딩을 "말에 다중 선택을 바인딩 할 때. BUT ViewBag.StudentID는 텍스트와 값을 정의로 사용하는 SelectList입니다.

DataTextField 및 DataValueField 지정자를 제거하면 MultiSelectFor가 기본값 인 "텍스트"및 "값"을 사용하므로 수정해야합니다.

이 아닌 임의의 Enumerable을 BindTo()로 사용하는 경우에만 DataTextField와 DataValueField를 사용해야합니다.은 Text 및 Value를 접근 자로 사용합니다. 즉, db.Students를 SelectList로 변환하지 않은 경우 ViewBag.StudentID는 IEnumerable이고 이면입니다. 바인딩 된 열거 형의 항목에 액세스하기 위해 False와 StudentID를 사용하도록 MultiSelect에 지시해야합니다.

+0

내 문제가 해결되었습니다. 그러나, 공개 IEnumerable SelectedStudentIDs {get; 세트; } 속성은 null 값을 사용합니다. 내가 선택한 학생 신분증을 보관할 것으로 기대하고 있습니다. – RAK