DropDownList с иностранной моделью c # - PullRequest
0 голосов
/ 25 января 2019

У меня есть модель с иностранным ключом к другим моделям. Исходя из этого постороннего, я хочу показать в моей форме 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();
            }

Для создания / редактирования.cshtml, HTML-код:

@Html.DropDownListFor(model => model.ViewData["PharmacyID"], new SelectList(ViewBag.pharmacies , "key", "value"),"-- select --")

Надеюсь, вы поможете мне исправить это:)

Спасибо за аванс!

1 Ответ

0 голосов
/ 25 января 2019

Проблема в том, что вы привязываетесь к 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...