@HTML.Выпадающий список для привязки к проблеме entity framework

#entity-framework #model-view-controller #visual-studio-2019 #html.dropdownlistfor

Вопрос:

У меня есть модель представления, которая отображает список значений в таблице Razor. Я хочу добавить раскрывающийся список для фильтрации данных таблицы перед ее отображением. Я нашел различные сообщения о привязке ddl к списку, но все они предлагают формат @Html.Выпадающий список для(x => Модель.поле) для управления DDL. К сожалению, когда я печатаю Модель. в моем списке с опережающим типом InteliSense не отображается список моделей представления.

Любая помощь будет очень признательна.

Моя модель-это:

 public class HoursView
    {
        [Key]
        public int HoursID { get; set; }
        [Display(Name = "Company ID:")]
        public int CompanyID { get; set; }
        public string CompanyName { get; set; }
        public int EmployeeID { get; set; }
        public string EmployeeName { get; set; }
        [Display(Name = "Week Ending Date:")]
        [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)]
        [Required]
        public DateTime? WeekEndingDate { get; set; }
        [Display(Name = "Hours Worked:")]
        [Required]
        public decimal? HoursWorked { get; set; }
        [Display(Name = "Tips:")]
        [Required]
        public decimal? Tips { get; set; }
        [Display(Name = "Tips-Cash:")]
        [Required]
        public decimal? Tips_Cash { get; set; }
        public IEnumerable<SelectListItem> Companies { get; set; }
    }
 

Мой контроллер «ПОЛУЧАЕТ» код:

 var requiresHours =
                from company in _context.Company
                join employee in _context.Employees
                on company.CompanyID equals employee.CompanyID
                join hours in _context.EmployeeHours
                on employee.EmployeeID equals hours.EmployeeID
                into hourEmployeees
                from subHours in hourEmployeees.DefaultIfEmpty()
                where (employee.EmployeeType == "Hourly" || employee.EmployeeType == "Tips") amp;amp;
                        (employee.EmployeeStatus == "Active")
                orderby employee.CompanyID, employee.EmployeeID
                select new HoursView
                {
                    CompanyID = company.CompanyID,
                    CompanyName = company.CompanyName,
                    EmployeeID = employee.EmployeeID,
                    EmployeeName = employee.EmployeeName,
                    WeekEndingDate = subHours == null ? dateEndingWeek : subHours.WeekEndingDate,
                    HoursWorked = subHours == null ? 0 : subHours.HoursWorked,
                    Tips = subHours.Tips == null ? 0 : subHours.Tips,
                    Tips_Cash = subHours.Tips_Cash == null ? 0 : subHours.Tips_Cash,
                    Companies = (from company in _context.Company select new SelectListItem
                    {
                        Value = company.CompanyID.ToString(),
                        Text = company.CompanyName
                    }).ToList()
                };
                return View(await requiresHours.ToListAsync());
 

Мой код бритвы (включая строку, которая не работает):

 @model IEnumerable<MvcPayroll.Models.HoursView>

@{
    ViewData["Title"] = "Index";
}

<h1>Index</h1>

@using (Html.BeginForm("Index","EmployeeHours",FormMethod.Post))
{
    @Html.DropDownListFor(x => Model. 
    

    <table class="table">
        <thead>
            <tr>
                <th>
                    @Html.DisplayNameFor(model => model.CompanyID)
                </th>
                <th>
                    @Html.DisplayNameFor(model => model.EmployeeID)
                </th>
                <th>
                    @Html.DisplayNameFor(model => model.WeekEndingDate)
                </th>
                <th>
                    @Html.DisplayNameFor(model => model.HoursWorked)
                </th>
                <th>
                    @Html.DisplayNameFor(model => model.Tips)
                </th>
                <th>
                    @Html.DisplayNameFor(model => model.Tips_Cash)
                </th>
                <th></th>
            </tr>
        </thead>
        <tbody>
            @foreach (var item in Model)
            {
                <tr>
                    <td>
                        @Html.DisplayFor(modelItem => item.CompanyName)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.EmployeeName)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.WeekEndingDate)
                    </td>
                    <td>
                        @Html.EditorFor(modelItem => item.HoursWorked)
                    </td>
                    <td>
                        @Html.EditorFor(modelItem => item.Tips)
                    </td>
                    <td>
                        @Html.EditorFor(modelItem => item.Tips_Cash)
                    </td>
                </tr>
            }
        </tbody>
    </table>
    <p><input type="submit" value="Save" /></p>
    <p style="color:green; font-size:12px;">
        @ViewBag.Message
    </p>
}
 

Спасибо,
Дэвид

Комментарии:

1. Насколько я могу видеть, ваша модель представляет собой список объектов. Вы не можете написать что-то вроде «List.Property». Попробуйте выпадающий список для(x => Модель. Первое нарушение. Собственность. и посмотрите, распознает ли InteliSense эти свойства.

Ответ №1:

Я никогда не мог заставить это работать. Я прибегнул к использованию пакета просмотра с коллекцией. Это было рекомендовано в ряде сообщений на saw на тему заполнения раскрывающихся списков на этом сайте.