DropdownList与外键模型C#

时间:2019-01-25 08:18:47

标签: c# foreign-keys html.dropdownlistfor argumentnullexception

我有一个带有其他模型的外键的模型。从这个外键中,我想在我的表单中显示一个带有第二个模型名称的DropDownList。当我转到create.cshtml或edit.cshtml时,出现以下错误:

  

ArgumentNullException:值不能为null。

这是我的代码:

// 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();
            }

进入create / edit.cshtml,HTML为:

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

希望您能帮助我修复它:)

谢谢你!

1 个答案:

答案 0 :(得分:0)

问题是您使用lambda表达式而不是具有值类型的模型属性并使用未分配的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>