首页 > 解决方案 > DropDownListFor 没有自动选择属性

问题描述

controller中,我正在创建ViewModel并填充其属性:

[HttpGet]
public ActionResult Index()
{
    PermissionViewModel vm = new PermissionViewModel()
    {
        Users = new List<UserViewModel>()
        {
            new UserViewModel()
            {
                Id = 1,
                Email = "foo.bar@example.com",
                IsSelected = false,
                Permissions = new List<SelectListItem>()
                {
                    new SelectListItem() { Value = "1", Text="Admin" },
                    new SelectListItem() { Value = "2", Text="Customer" },
                    new SelectListItem() { Value = "3", Text="Employeer" }
                },
                SelectedPermissionId = 2,
            }
        },

        Pagination = new List<SelectListItem>() {
            new SelectListItem() { Value = "10", Text = "10" },
            new SelectListItem() { Value = "20", Text = "20"}
        },
    };

    return View(vm);
}

现在,我想显示数据。我有问题Permissions。我设置SelectedPermissionId2,所以我希望它Customer会被自动选中。

@foreach (var user in Model.Users)
{
    <tr>
        <td>@user.Email</td>
        <td>
            @Html.DropDownListFor(x => user.SelectedPermissionId, user.Permissions)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id = user.Id }) | @Html.ActionLink("Delete", "Delete", new { id = user.Id })
        </td>
        <td>@Html.CheckBoxFor(x => user.IsSelected)</td>
    </tr>
}

不幸Admin被选中。为什么会这样?

编辑

我发现如果我移动到Permissions然后这个:SelectedPermissionIdPermissionViewModel

@Html.DropDownListFor(x => x.SelectedPermissionId, Model.Permissions)

正在工作中。现在Customer被选中。但我必须在UserViewModel..

解决方案

我找到了解决方案。我不得不改变:

@Html.DropDownListFor(x => user.SelectedPermissionId, user.Permissions)

对此:

@Html.DropDownListFor(x => user.SelectedPermissionId, new SelectList(user.Permissions, "Value", "Text", user.SelectedPermissionId))

有谁知道为什么这是必要的?

标签: c#asp.netasp.net-mvc

解决方案


您的解决方案很好通常我在下拉列表中使用此代码我认为它比使用助手更容易

<select style="height:auto" class="form-control " id="Permissions" name="Permissions" value="@permission">
                 <!--   <option value="null"
                            @if (permission.Text == null) { <text> selected</text>    }>
                    Permissions
                    </option>
 -->
                    @for (int i = 0; i < ViewBag.Permissions.Count; i++)

                    {
                      <option value="@ViewBag.Permissions[i].Text "
                              @if (permission.Text == ViewBag.Permissions[i].Text ) { <text> selected</text>}>
                        @ViewBag.Permissions[i].Text 
                      </option>
                    }
                  </select> 

推荐阅读