2015-09-19 73 views
0

我一直在用這個HTML Helper放屁一段時間,遵循各種理論上完成相同的最終結果的例子。然而,我似乎無法產生最終結果...DropDownListFor()幫助請

也許有人可以看到我做錯了之前,我回到迭代選擇與foreach選項。鎖定這個幫助程序的工作方式是很好的,而不是使用foreach()選擇的代碼。提前致謝。

編輯控制器;

public ActionResult Edit(string id) 
    { 
     if (id != "") 
     { 

      UserViewModel user = (from u in db.Users.Where(u => u.Id.Equals(id)) 
            from ur in u.Roles 
            join r in db.Roles on ur.RoleId equals r.Id 

            select new UserViewModel 
            { 
             UserId = u.Id, 
             DisplayName = u.DisplayName, 
             Role = r.Name, 
             RoleId = r.Id 

            } 
         ).FirstOrDefault(); 

      //Select List items for select list 
      var roles = db.Roles.Select(r => new SelectListItem { Value = r.Id, Text = r.Name }); 

      //select list with selected value 
      user.Roles = new SelectList(roles,"Value", "Text", user.RoleId); 


      return View(user); 
     } 
     return View(); 
    } 

查看;

<div class="form-group"> 
    @Html.LabelFor(model => model.Role, htmlAttributes: new { @class = "control-label col-md-2" }) 

    <div class="col-md-10"> 
     @Html.DropDownListFor(model => model.Role, Model.Roles, null, new { @class = "form-control" }) 

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

問題是什麼?和預期的結果是什麼,你提到 –

回答

1

您的代碼

var roles = db.Roles.Select(r => new SelectListItem { Value = r.Id, Text = r.Name }); 

創建IEnumerable<SelectListItem>

user.Roles = new SelectList(roles,"Value", "Text", user.RoleId); 

剛剛從它創建了另一個相同IEnumerable<SelectListItem>所以它只是毫無意義的額外開銷,因爲你在你的模型綁定到一個屬性,最後paramater(user.RoleId)將被忽略,也毫無意義

這應該只是

user.Roles = db.Roles.Select(r => new SelectListItem { Value = r.Id, Text = r.Name }); 

當你創建這個SelectList將值設置到RoleId屬性但你試圖綁定到Role財產UserViewModel而不是RoleId財產。由於Role的值與選項值之一不匹配,所以始終選擇下拉列表中的第一個選項(因爲必須是)。

更改代碼在視圖中

@Html.DropDownListFor(model => model.RoleId, Model.Roles, null, new { @class = "form-control" }) 

如果RoleId值相匹配的選項值中的一個,那麼它會被選中。

注意:您的視圖模型中的Role屬性看起來沒有必要,您需要在查詢中創建與Roles表的連接。

+0

謝謝!我以爲我在做這件事,欣賞徹底的解釋!現在就像魅力一樣。 – JReam