#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 на тему заполнения раскрывающихся списков на этом сайте.