ViewModel的下拉列表填充

问题描述 投票:0回答:1

首先,我知道这个问题已经问过很多遍了。我读了无数的文章和Stack Overflow的答案。我已经尝试解决了四天的问题,如果有人不介意,我想我需要帮助。

我有两个数据库。员工数据库具有一个名为“ DisplayName”的字段-第二个数据库与第一个数据库有关系,并且它们可以很好地协作。我可以在另一个应用程序中完美地调用这两个数据库。

您可以在图片Index Page中看到我有一个人名单。我想要一个下拉列表,列出数据库中所有显示名称,以便员工可以将自己添加到列表中。您会在图像中看到一个下拉列表,但未填充。

似乎很简单。哎呀我遇到的部分问题是我的家庭控制器已经具有填充图片中列表的功能,因此我无法在该页面上进行其他操作。我在很多网站上尝试了很多建议。我收到IEnumerable错误或显示参考错误。...

这里是我的控制器(再次-它没有任何帮助下拉菜单的内容:]

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; }


    }

}

我希望这足够清楚。我用了这么多代码尝试了很多不同的方式-错误与我尝试过的所有东西都是不同的。

感谢您的耐心和帮助!

asp.net-mvc dropdown
1个回答
0
投票

您可以添加到视图模型中

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;
    }

编辑:记住在视图中使用您的模型!

© www.soinside.com 2019 - 2024. All rights reserved.