好吧,这看起来很简单,但让我头晕目眩。
我已经基于CodeFirst创建了模型。
public class Category
{
public int ID { get; set; }
[StringLength(255, MinimumLength = 1)]
public string Name { get; set; }
}
public class SubCategory
{
public int ID { get; set; }
public Category category { get; set; }
[StringLength(255, MinimumLength = 1)]
public string Name { get; set; }
}
现在,当我为SubCategory自动生成控制器和视图时,它(开箱即用)让我创建新的SubCategory对象而不指定类别(即使它正确地创建了与Category表中的外键关系) DB)。
所以我虽然没问题,但我只是在create.cshtml文件中放下一个下拉菜单并让它使用它。
一段时间后,我成功将其添加到控制器:
public ActionResult Create()
{
ViewBag.Categories = new SelectList(db.Category.ToList(),"ID","Name");
return View();
}
以及此视图:
@Html.DropDownList(model => model.category, "Categories")
但是现在该对象没有自动捕获我想将它用于我的外键,所以当我在POST方法停止代码时,它仍然在类别字段中显示NULL为对象。
我想我的问题是双重的。我该怎么办?如果我的方法到目前为止,我错过了什么?
我只希望保存到SubCategory表的新对象将外键包含在Category中。
希望这是有道理的。
答案 0 :(得分:1)
最简单的方法是在CategoryId
类中定义名为SubCategory
的标量属性
public class SubCategory
{
public int ID { get; set; }
public int CategoryID { get; set; }
public Category category { get; set; }
[StringLength(255, MinimumLength = 1)]
public string Name { get; set; }
}
然后在EF中正确映射
之后你把
@Html.DropDownListFor(
model => model.CategoryID, category SelectList instance)
)
其他选项是创建自定义模型绑定器以绑定Category
类型。