Dropdownlist 与 dot net MVC 5 中的对象列表绑定

Dropdownlist Binding with the list of objects in dot net MVC 5

我试图在 MVC 中绑定 DDL 列表,但我没有得到正确的值。请看下面的代码行。

UserViewModel userVM = new UserViewModel();
CustomLogger.Write("Service Call: Get UserEmployeeId " + ": Start");
HttpResponseMessage response = await ServiceGet(ClientConfig.ServiceLayerUrl + ClientConfig.GetAllUsersUrl);
CustomLogger.Write("Service Call: Get UserEmployeeId " + ": End");

if (response.IsSuccessStatusCode)
{
    var res = response.Content.ReadAsStringAsync().Result;
    var list = JsonConvert.DeserializeObject<List<User>>(res);


    //select only UserEmployeeId  

    var userList = (from item in list select item);

    userVM.AvailableUsers = userList;

    return View(userVM);
}
else
{
    CustomLogger.Write("Service Call: Get UserEmployeeId " + ": Issue" + response);
    return null;
}

查看:

@Html.DropDownListFor(model => model.UserEmployeeId, new SelectList(Model.AvailableUsers, "UserEmployeeId"), "SELECT", new { @class = "form-control" })

输出: 在 DDL 列表中,我越来越喜欢 TMS.Common.Entities.User

我无法在 DDL 中绑定列表的值。

实际上,通过使用 new SelectList(Model.AvailableUsers, "UserEmployeeId"),您试图创建仅包含 2 个重载的 SelectList,这是不正确的:

public SelectList(IEnumerable items, object selectedValue)

你需要的是使用3 overload containing text and value field:

public SelectList(IEnumerable items, string dataValueField, string dataTextField)

因此,DropDownListFor 的正确用法应该是这样的:

@Html.DropDownListFor(model => model.UserEmployeeId, new SelectList(Model.AvailableUsers, "UserEmployeeId", "UserEmployeeId"), "SELECT", new { @class = "form-control" })

第二个错误是您从这个查询中分配 IQueryable:

var userList = (from item in list select item);

其中 SelectList 第一个参数需要 IEnumerable,因此只需使用 ToList():

var userList = (from item in list select item).ToList();

TMS.Common.Entities.User 类型名称出现是因为它隐式调用 ToString() 到存储在 userList.

中的 IQueryable 实例