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>
Другие вопросы по тегам