Раскрывающийся список населения из ViewModel - PullRequest
0 голосов
/ 24 февраля 2020

Прежде всего, я знаю, что этот вопрос задавался много, много раз. Я прочитал бесчисленные статьи и ответы на переполнение стека. Я пытался разобраться с этой проблемой в течение четырех дней и думаю, что мне нужна помощь, если кто-то не против. База данных сотрудников имеет поле с именем «DisplayName» - вторая база данных связана с первой, и они отлично работают вместе. Я могу назвать две базы данных идеально в другом приложении.

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

Кажется простым. Но Боже. Часть проблемы, с которой я столкнулся, состоит в том, что мой домашний контроллер уже имеет функцию для заполнения списка на картинке, поэтому я не могу сделать еще одну на этой странице. Я перепробовал много предложений на многих сайтах. Я получаю IEnumerable error или отображаю ссылки на ошибки ....

Вот мой контроллер (опять же - в нем нет ничего, что помогло бы раскрытию):

namespace SeatingChart.Controllers
{
    public class HomeController : Controller
    {
        private ApplicationDbContext db = new ApplicationDbContext();


        // GET: Employee
        public ActionResult Index()
        {

            var lists = db.BreakModels
                            .Include("Employee")
                            .Include("TimeEntered")
                            .Include("TimeCleared")
                            .Include("DisplayName")
                            .Select(a => new HomeIndexViewModels
                            {
                                Employee = a.Employee,
                                DisplayName = a.EmployeeModels.DisplayName,
                                TimeEntered = a.TimeEntered,
                                TimeCleared = a.TimeCleared.Value,
                                Id = a.EmployeeModels.Id,
                            });

            return View(lists);
        }

Просмотр:

    @model IEnumerable<SeatingChart.Models.HomeIndexViewModels>

@{
    Layout = null;
}

@Html.Partial("_Header")

    <div class="container_lists">
        <div class="container_break col-md-8">
            <h5 style="text-align:center">Break List</h5>
            <table class="table-bordered col-lg-12">
                @if (Model != null)
                {
                    foreach (var item in Model)
                    {
                        if (item.TimeCleared == null)
                        {
                            <tr>
                                <td>
                                    @Html.DisplayFor(modelItem => item.DisplayName)
                                </td>
                                <td>
                                    &ensp;BV
                                </td>
                                <td>
                                    &ensp;@item.TimeEntered.ToString("HH:mm")
                                </td>
                            </tr>
                        }
                    }
                }
            </table>
            @using (Html.BeginForm())
            {
                <div class="row site-spaced">
                    <div class="col-3">
                        @Html.DropDownList("DisplayName", new SelectList(new List<string>() { "---Dispatcher---" }), new { @class = "required " })
                    </div>
                </div>
                <div class="col-3">
                    <input type="submit" value="Submit" class="site-control" />
                </div>
            }
        </div>
    </div>

ViewModel:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Html;

namespace SeatingChart.Models
{
        public class HomeIndexViewModels 
        {

        //Break Model
        public int BreakId { get; set; }
            public int Employee { get; set; }
            public DateTime TimeEntered { get; set; }
            public DateTime? TimeCleared { get; set; }

            //Employee Model
            public int Id { get; set; }
            public string DisplayName { get; set; }
            public string DisplayNames { get; set; }
            public string FirstName { get; set; }
            public string LastName { get; set; }
            public bool NotActive { get; set; }
            public int Force { get; set; }

            public string EmployeeList { get; set; }


    }

}

Надеюсь, это достаточно ясно. Я пробовал так много разных способов с таким большим количеством кода - ошибки разные со всем, что я пробовал.

Заранее спасибо за ваше терпение и помощь!

1 Ответ

0 голосов
/ 24 февраля 2020

Вы можете добавить в свою модель просмотра

public List<SelectListItem> Employees { get; set; }

Затем вы можете заполнить этот список контроллером, а в поле зрения просто вызвать его:

@Html.DropDownListFor(m => m.Id, Model.Employees, new { @class = "form-control", required = "required" })

Обновить - как заполнить список. Должен работать (но не проверенный код).

    public List<SelectListItem> GetEmployeeForDropdown(List<HomeIndexViewModels> list)
    {
        List<SelectListItem> empList = new List<SelectListItem>();

        try
        {

                if (list != null && list.Count > 0)
                {
                    foreach (var item in list)
                    {
                        empList.Add(new SelectListItem { Text = item.DisplayName, Value = item.Id.ToString() });
                    }
                }
                else
                {
                    empList.Add(new SelectListItem { Text = "No items", Value = string.Empty });
                }


        }
        catch (Exception ex)
        {
            //handle exceptions here
        }

        return empList;
    }

Редактировать: Не забывайте использовать вашу модель в поле зрения!

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