DropDownListFor中的值未将值保存到数据库

时间:2019-03-09 19:59:35

标签: asp.net-mvc

这是我的观点

<div class="form-group">
    @Html.LabelFor(model => model.SubCatagory, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.DropDownListFor(model => model.SubCatagory, new SelectList(ViewBag.SubCategories, "Id", "Name", "Category"))
        @Html.ValidationMessageFor(model => model.SubCatagory, "", new { @class = "text-danger" })
    </div>
</div>

这是我保存数据的方法。

 dbContext.Products.Add(product);
 dbContext.SaveChanges();

它将所有值保存到数据库中,除了SubCatagoryId。 谁能帮我吗?

1 个答案:

答案 0 :(得分:1)

SubCatagory属性包含空值,因为它是绑定到SubCatagory类的复杂对象属性,DropDownListFor返回单个选定值而不是整个类属性。您应该执行以下操作之一:

选项A:创建所选值属性

创建一个int属性,该属性将保存DropDownListFor类中Product的选定值,然后您可以通过基于传递给数据库的查询来在控制器内分配SubCatagory属性新创建的属性中的值。

模型

public class Product 
{ 
    [Key] 
    public int Id { get; set; }

    [Display(Name = "Sub Catagory")] 
    public int SelectedSubCatagory { get; set; }

    // other properties
}

查看

<div class="form-group">
    @Html.LabelFor(model => model.SelectedSubCatagory, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.DropDownListFor(model => model.SelectedSubCatagory, new SelectList(ViewBag.SubCategories, "Id", "Name", "Category"))
        @Html.ValidationMessageFor(model => model.SelectedSubCatagory, "", new { @class = "text-danger" })
    </div>
</div>

选项B:使用SubCatagory类的现有子属性

假设您在SubCatagory类中声明了ID属性,如下所示:

public class SubCatagory
{
    public int Id { get; set; }

    public string Name { get; set; }

    // other properties
}

您可以使用它绑定到DropDownListFor助手上,如下例所示:

查看

<div class="form-group">
    @Html.LabelFor(model => model.SubCatagory.Id, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.DropDownListFor(model => model.SubCatagory.Id, new SelectList(ViewBag.SubCategories, "Id", "Name", "Category"))
        @Html.ValidationMessageFor(model => model.SubCatagory.Id, "", new { @class = "text-danger" })
    </div>
</div>

请注意,如果采用此选项,请确保SubCatagory类中的new属性已经实例化(使用Product关键字,以避免在使用NullReferenceException子级时使用该属性属性。

参考:

How to simple Html.DropDownListFor MVC.NET (Nested Viewmodels)