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
实例
我试图在 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
实例