Dropdownlist Связывание со списком объектов в точечной сети MVC 5 - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь связать список DDL в MVC, но не получаю правильное значение. Пожалуйста, смотрите строку кода ниже.

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.

enter image description here

1 Ответ

0 голосов
/ 14 сентября 2018

На самом деле, используя new SelectList(Model.AvailableUsers, "UserEmployeeId"), вы пытаетесь создать SelectList всего с двумя перегрузками, что неверно:

public SelectList(IEnumerable items, object selectedValue)

Вам нужно использовать 3 перегрузки, содержащие текст и поле значения :

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() к IQueryable экземпляру, хранящемуся внутри userList.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...