DropDownList с иностранной моделью C#
У меня есть модель с иностранным ключом к другим моделям. Исходя из этого постороннего, я хочу показать в моей форме DropDownList с названием моей второй модели. Когда я иду в create.cshtml или edit.cshtml, у меня появляется следующая ошибка:
ArgumentNullException: значение не может быть нулевым.
Вот мой код:
// Models
public class Timesheet
{
public Pharmacy Pharmacy { get; set; }
}
// Controllers / ame code on edit.cshtml.cs
public IActionResult OnGet()
{
Dictionary<int, string> pharmacies = new Dictionary<int, string>();
foreach (Pharmacy p in _context.Pharmacy)
pharmacies.Add(p.PharmacyID, p.Name);
ViewData["PharmacyID"] = pharmacies;
return Page();
}
В создать /edit.cshtml, HTML-код:
@Html.DropDownListFor(model => model.ViewData["PharmacyID"], new SelectList(ViewBag.pharmacies , "key", "value"),"-- select --")
Я надеюсь, что вы можете помочь мне исправить это:)
Спасибо за аванс!
1 ответ
Проблема в том, что вы привязаны к ViewData
использование лямбда-выражения вместо свойства модели с типом значения и использование неназначенного ViewBag.pharmacies
следовательно, привязка не работает как задумано.
Сначала вы должны создать свойство модели:
[BindProperty]
public int PharmacyID { get; set; }
А потом привязать его к DropDownListFor
помощник:
@Html.DropDownListFor(model => model.PharmacyID, new SelectList(ViewData["PharmacyID"], "Key", "Value"),"-- select --")
Или использовать <select>
помощник по тегам:
// Page controller (cshtml.cs)
ViewData["PharmacyID"] = new SelectList(pharmacies, "Key", "Value");
<!-- CSHTML view -->
<select asp-for="PharmacyID" asp-items="@ViewData["PharmacyID"]" ...></select>