2016-12-29 73 views
0

我正在連接到實體框架的MVC應用程序。在我看來,我有一個下拉列表。代碼如下所示:MVC dropdownlist錯誤顯示

@{ 
    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循環之前,看看它是一個有效的值類標識碼? – 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> 
          } 

         } 
        }