DropdownList值不会添加到数据库

时间:2018-01-01 19:29:30

标签: asp.net .net razor asp.net-core-mvc

我可以在下拉列表中显示数据库中的值以及需要值的位置。 但是在创建内容时,我无法从下拉列表中获取值到我的数据库。它变得空了。 我尝试过s.o.f的一些解决方案,但它们没有用。

模型1:

    public class Kategori
{
    [Key]
    public int KategoriID { get; set; }
    public string Namn { get; set; }    
}

模型2:

    public class Inlägg
{
    [Key]
    public int InläggsID { get; set; }     
    public Kategori Kategori { get; set; }
}

控制器:

        // POST: Inlägg/Create
    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Create([Bind("Titel,Text,Kategori.Namn")] Inlägg inlägg)
        //The Kategori is getting null
    {
        if (ModelState.IsValid)
        {
            inlägg.Datum = DateTime.Now;
            _context.Add(inlägg);
            await _context.SaveChangesAsync();
            return RedirectToAction(nameof(Index));
        }
        return View(inlägg);
    }

查看:

            @Html.DropDownList("Kategori", null, htmlAttributes: new { @class = "form-control" })

我尝试过使用SelectItemList,使用选项值进行选择,在Models类中有一个SelectItem,在Inlägg中也有一个“public Kategori List”。 真的不知道如何解决这个问题。我今天刚试了8个小时,昨天又跑了2个小时。 如何获取用户在下拉列表中选择的值而不是获取null?告诉我是否需要发送更多代码: - )

2 个答案:

答案 0 :(得分:0)

你应该改变它;

 @Html.DropDownList("Kategori", null, htmlAttributes: new { @class = "form-control" })

 @Html.DropDownList("SelectedCategory", ViewData["Kategori"] as SelectList, htmlAttributes: new { @class = "form-control" })

选定的下拉元素作为SelectedCategory传递给服务器端。 另外,我强烈建议您使用Model类而不是ViewData来在控制器和视图之间传输数据。

答案 1 :(得分:0)

您需要为外键值添加另一个属性。由于您的其他相关实体类名称为Kategori,因此您可以将此新属性命名为KategoriId,以使其与外键属性名称的约定匹配。

public class Inlagg
{
    [Key]
    public int InläggsID { get; set; }
    public string Titel { get; set; }
    public string Text { get; set; }

    public DateTime Datum { get; set; }   

    public virtual Kategori Kategori { get; set; }
    public int?  KategoriId { set;get;}  // This is the new property
}

现在在视图中的表单中,确保DropDownList帮助器呈现的select元素与新属性名称具有相同的name属性值(检查页面的视图源)< / p>

@Html.DropDownList("KategoriId", ViewData["Kategori"] as SelectList)

现在最后,确保在Bind属性Include列表中包含这个新的输入名称/属性名称,以便模型绑定器绑定它。

public async Task<IActionResult> Create([Bind(Include="Titel,Text,KategoriId")]
                                                                        Inlagg inlagg)
{
    // to do : your code for saving and returning something
}

另一种选择是使用仅包含所需属性的视图模型,而不是将Bind属性与实体类一起使用