首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DropDownListFor()帮助

DropDownListFor()帮助
EN

Stack Overflow用户
提问于 2015-09-19 22:22:49
回答 1查看 49关注 0票数 0

我已经和这个HTML助手在一起玩了一段时间了,下面的例子在理论上实现了相同的结果。然而,我似乎不能产生最终结果.

也许有人会发现我做错了什么,然后再用前瞻迭代出select选项。最好能锁定这个助手的工作方式,这比使用foreach()的select代码更少。提前谢谢。

编辑控制器;

代码语言:javascript
复制
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();
    }

观点;

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-19 23:33:14

你的代码

代码语言:javascript
复制
var roles = db.Roles.Select(r => new SelectListItem { Value = r.Id, Text = r.Name });

创建IEnumerable<SelectListItem>

代码语言:javascript
复制
user.Roles = new SelectList(roles,"Value", "Text", user.RoleId);

只需从它创建另一个相同的IEnumerable<SelectListItem>,因此它只是没有意义的额外开销,并且由于绑定到模型中的属性,最后一个参数(user.RoleId)被忽略,也没有意义。

应该是公正的

代码语言:javascript
复制
user.Roles = db.Roles.Select(r => new SelectListItem { Value = r.Id, Text = r.Name });

创建此SelectList时,可以将值设置为RoleId属性,但随后尝试绑定到UserViewModelRole属性,而不是RoleId属性。由于Role的值将与其中一个选项值不匹配,因此将始终选择下拉列表中的第一个选项(因为必须选择某些选项)。

将视图中的代码更改为

代码语言:javascript
复制
@Html.DropDownListFor(model => model.RoleId, Model.Roles, null, new { @class = "form-control" })

如果RoleId的值与其中一个选项值相匹配,那么它将被选中。

附带注意:您的视图模型中的Role属性似乎没有必要,在查询中创建到Roles表的连接也是不必要的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32673811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档