2016-12-29 1 views
0

Entity Framework에 연결된 MVC 응용 프로그램을 만들고 있습니다. 내보기에는 드롭 다운 목록이 있습니다. 코드는 다음과 같습니다.MVC 드롭 다운 목록이 잘못 표시되었습니다.

@{ 
    ViewBag.Title = "ClassesPickGroup"; } @model ClassDeclarationsThsesis.Models.ClassesPickGroupViewModel 

<h2>ClassesPickGroup</h2> 


@foreach (var user in Model.users) { 
    if (user.email.Replace(" ", String.Empty) == HttpContext.Current.User.Identity.Name) 
    { 
     if (user.user_type.Replace(" ", String.Empty) == 3.ToString() || user.user_type.Replace(" ", String.Empty) == 2.ToString()) 
     { 
      using (Html.BeginForm("ClassesPickGroup", "Account", FormMethod.Post, new { @class = "form-horizontal", role = "form" })) 
      { 
       @Html.AntiForgeryToken() 
       <h4>Generate summary views</h4> 
       <hr /> 
       @Html.ValidationSummary("", new { @class = "text-danger" }) 
       <div class="form-group"> 
        @{ 
         List<SelectListItem> listItems1 = new List<SelectListItem>(); 
         foreach (var sub in Model.subjects) 
         { 
          if (sub.name.Replace(" ", String.Empty) == Model.subject_name.Replace(" ", String.Empty)) 
          { 
           Model.subject_id = sub.class_id; 
          } 
         } 
         foreach (var group in Model.groups) 
         { 
          if (group.class_id == Model.subject_id) 
          { 
           listItems1.Add(new SelectListItem 
           { 
            Text = group.name, 
            Value = group.name, 
           }); 
          } 
         } 
        } 
        @Html.LabelFor(m => m.selected_group, new { @class = "col-md-2 control-label" }) 
        <div class="col-md-10"> 
         @Html.DropDownListFor(m => m.selected_group, listItems1, new { @class = "form-control" }) 
        </div> 
       </div> 
       <div class="form-group"> 
        <div class="col-md-offset-2 col-md-10"> 
         <input type="submit" class="btn btn-default" value="Submit" /> 
        </div> 
       </div> 

          } 
         } 
         if (user.user_type.Replace(" ", String.Empty) == 1.ToString()) 
         { 
          <p>You do not have enough permissions to enter this page. Contact the administrator.</p> 
           } 

          } 
         } 

그러나 드롭 다운 목록에 잘못된 내용이 표시됩니다. 요소의 수는 정확하지만 모든 이름은 동일합니다. 모든 이름은 모델에서 선택하는 첫 번째 일치하는 '그룹'에 해당합니다. 내가 뭘 잘못 했니?
내 컨트롤러는 다음과 같습니다

public ActionResult ClassesPickGroup(ClassesPickGroupViewModel value) 
     { 
      ClassDeclarationsDBEntities1 entities=new ClassDeclarationsDBEntities1(); 
      int subj_id=0; 
      ClassesPickGroupViewModel model=new ClassesPickGroupViewModel(); 
      model.subject_name = value.subject_name; 
      foreach (var subject in entities.Subjects) 
      { 
       if(subject.name.Replace(" ",String.Empty)==value.subject_name.Replace(" ", String.Empty)) 
       { 
        subj_id = subject.class_id; 
       } 
      } 
      model.groups = entities.Groups.ToList(); 
      model.subjects = entities.Subjects.ToList(); 
      model.users = entities.Users.ToList(); 
      if (ModelState.IsValid) 
      { 
       return RedirectToAction("ClassesView", "Account"); 
      } 
      else 
      { 
       model.groups = entities.Groups.ToList(); 
       model.subjects = entities.Subjects.ToList(); 
       model.users = entities.Users.ToList(); 
       return View(model); 
      } 
      return View(model); 
     } 

분명히 잘 작동하지 않는 그룹을 추가, 그룹 (그러나 데이터베이스에 그들이) 고유하지 않습니다. 그게 뭐가 잘못 되었 니?

+1

'Model.groups'에는 고유 한 그룹이 있습니까? 드롭 다운 목록 옵션이 루핑을 통해 만들어지고있는 것 같습니다. 또한 if 조건이 true를 반환 할 때 새 SelectListItem을 추가합니다. 그것은 한 번만 또는 한 번 이상 진실로 돌아갈 것인가? 그것은 모두'Model.groups'에 어떤 데이터가 있는지에 달려 있습니다. – Shyju

+0

@Shyju 편집을 참조하십시오 –

+0

'class_id' 속성 값은 고유합니까? 'Model.subject_id'의 가치는 무엇입니까? (보기 코드에서 그 값을 설정하려고하는 것 같습니다. 두 번째 foreach 루프 전에 인쇄 할 수 및 class_Id 올바른 값을 볼 수 있습니까? – Shyju

답변

0

컨트롤러에서 model.subject_id에 대한 값을 전달하지 않습니다. 그래서 마지막 값은 동일한 subject_id에 딱 맞는 이름으로 저장됩니다.

@{ 
ViewBag.Title = "ClassesPickGroup"; } @model ClassDeclarationsThsesis.Models.ClassesPickGroupViewModel 

<h2>ClassesPickGroup</h2> 


@foreach (var user in Model.users) { 
if (user.email.Replace(" ", String.Empty) == HttpContext.Current.User.Identity.Name) 
{ 
    if (user.user_type.Replace(" ", String.Empty) == 3.ToString() || user.user_type.Replace(" ", String.Empty) == 2.ToString()) 
    { 
     using (Html.BeginForm("ClassesPickGroup", "Account", FormMethod.Post, new { @class = "form-horizontal", role = "form" })) 
     { 
      @Html.AntiForgeryToken() 
      <h4>Generate summary views</h4> 
      <hr /> 
      @Html.ValidationSummary("", new { @class = "text-danger" }) 
      <div class="form-group"> 
       @{ 
        List<SelectListItem> listItems1 = new List<SelectListItem>(); 
        foreach (var sub in Model.subjects) 
        { 
         if (sub.name.Replace(" ", String.Empty) == Model.subject_name.Replace(" ", String.Empty)) 
         { 
          Model.subject_id = sub.class_id; 
         } 
          foreach (var group in Model.groups) 
          { 
           if (group.class_id == Model.subject_id) 
           { 
           listItems1.Add(new SelectListItem 
           { 
            Text = group.name, 
            Value = group.name, 
           }); 
           } 
          } 
         } 
        } 

       } 
       @Html.LabelFor(m => m.selected_group, new { @class = "col-md-2 control-label" }) 
       <div class="col-md-10"> 
        @Html.DropDownListFor(m => m.selected_group, listItems1, new { @class = "form-control" }) 
       </div> 
      </div> 
      <div class="form-group"> 
       <div class="col-md-offset-2 col-md-10"> 
        <input type="submit" class="btn btn-default" value="Submit" /> 
       </div> 
      </div> 

         } 
        } 
        if (user.user_type.Replace(" ", String.Empty) == 1.ToString()) 
        { 
         <p>You do not have enough permissions to enter this page. Contact the administrator.</p> 
          } 

         } 
        } 
관련 문제