Linq: выбрать несколько значений и назначить для выбора с определенной опцией / значением - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь выбрать несколько значений и назначить их списку выбора с определенным параметром / значением, которое затем передается через viewbag в мое представление, проблема, с которой я сталкиваюсь, заключается в структуре, когда она отображается и когда находится в режиме редактированиязначение предварительно не заполняется.

Я провел различные поиски, чтобы довести меня до этой точки, но большинство используют JQuery или другие фреймворки, я надеюсь остаться в C # / MVC, просто я сейчас не уверен вкакую фразу искать, чтобы найти существующее решение проблемы такого типа.

Кто-нибудь может дать мне несколько указателей?

Вид:

<div class="form-group">
    @Html.LabelFor(model => model.employeeID, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.DropDownListFor(model => model.employeeID, ViewBag.employee as List<SelectListItem>, "Select", new { @class = "form-control" })
        @Html.ValidationMessageFor(model => model.employeeID, "", new { @class = "text-danger" })
    </div>
</div>

Контроллер:

 var employeeID = ((from x in dbdev.employeeDetails orderby x.employeeID select new { Name =  x.employeeNumber + x.knownas + x.surname, Value = x.employeeID } ).Distinct()).ToList();
 SelectList employeeIDList = new SelectList(employeeID);
 ViewBag.employeeID = employeeIDList;

Модель:

[Required]
[Range(1, 2147483647)]
[Display(Name = "Employee ID")]
public int employeeID { get; set; }

Как только мой код отрендерен, выборка имеет следующую структуру

<option>{ Name = 568883PhilShort, Value = 1 }</option>

, но я на самом деле пытаюсь создать следующую структуру.

<option value="1">568883 Phil Short</option>

Ниже приведеномодификация из комментариев

Модель / HTML неизменна

Обновлен контроллер на основе комментариев:

 var employeesList = (from x in dbdev.employeeDetails.AsEnumerable()
                                     orderby x.employeeID ascending
                                     select new
                                     {
                                         Name = String.Format("{0} {1} {2}", x.employeeNumber, x.knownas, x.surname),
                                         Value = x.employeeID
                                     }).ToList();

                SelectList employeeIDList = new SelectList(employeesList, "Value", "Name", userAccess.employeeID);
                ViewBag.employeeID = employeeIDList;

Затем, чтобы уменьшить код, я реорганизовал следующее:

  ViewBag.employeeID = new SelectList((from x in dbdev.employeeDetails.AsEnumerable()
                                                            orderby x.employeeID ascending
                                                            select new
                                                            {
                                                                Name = String.Format("{0} {1} {2}", x.employeeNumber, x.knownas, x.surname),
                                                                Value = x.employeeID
                                                            }).ToList(), "Value", "Name", userAccess.employeeID);

1 Ответ

0 голосов
/ 26 октября 2018

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

var employeesList = dbdev.employeeDetails.OrderBy(x => x.employeeID)
                         .AsEnumerable()
                         .Select(x => new {
                              Name = String.Format("{0} {1} {2}", x.employeeNumber, x.knownas, x.surname), 
                              Value = x.employeeID
                         }).ToList();

Альтернатива с помощью выражения запроса:

var employeesList = (from x in dbdev.employeeDetails.AsEnumerable()
                     orderby x.employeeID ascending
                     select new {
                         Name = String.Format("{0} {1} {2}", x.employeeNumber, x.knownas, x.surname), 
                         Value = x.employeeID
                     }).ToList();

Затем создайте SelectList, используясуществующий список:

SelectList employeeIDList = new SelectList(employeesList, "Value", "Name", userAccess.employeeID);

Или ... просто создайте IEnumerable<SelectListItem> напрямую и передайте его помощнику DropDownListFor:

var employeesList = dbdev.employeeDetails.OrderBy(x => x.employeeID)
                         .AsEnumerable()
                         .Select(x => new SelectListItem {
                              Text = String.Format("{0} {1} {2}", x.employeeNumber, x.knownas, x.surname), 
                              Value = x.employeeID
                         }).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...