这是我的观点
<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。 谁能帮我吗?
答案 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)