2015-09-19 65 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