外键的.net mvc razor下拉列表
好吧,这看起来很简单,但让我头晕目眩 我已经基于CodeFirst创建了模型外键的.net mvc razor下拉列表,.net,asp.net-mvc-3,entity-framework-4.1,ef-code-first,viewmodel,.net,Asp.net Mvc 3,Entity Framework 4.1,Ef Code First,Viewmodel,好吧,这看起来很简单,但让我头晕目眩 我已经基于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 C
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; }
}
现在,当我为子类别自动生成控制器和视图时,它(开箱即用)允许我在不指定类别的情况下创建新的子类别对象(即使它正确地创建了与数据库中的类别表的外键关系)
所以我想好了,我会在create.cshtml文件中下拉一个下拉列表,让它使用它
一段时间后,我成功地将此添加到控制器:
public ActionResult Create()
{
ViewBag.Categories = new SelectList(db.Category.ToList(),"ID","Name");
return View();
}
这一观点:
@Html.DropDownList(model => model.category, "Categories")
但是现在,对象不会自动捕获我想要将其用于外键的内容,因此当我在POST方法中停止代码时,它仍然会在category字段中显示空值的对象
我想我的问题是双重的。我该怎么做?如果到目前为止我的方法是正确的,我还缺少什么
我只希望保存到子类别表的新对象包含类别的外键
希望这是有意义的。最简单的方法是在
子类别
类中定义一个名为CategoryId
的标量属性
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)
)
另一个选项是创建自定义模型绑定器以绑定
类别
类型。最简单的方法是在子类别
类中定义名为类别ID
的标量属性
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类型。很抱歉,我试图按照此操作,但我遇到了问题:@Html.DropDownList(model=>model.CategoryID,“Categories”),错误:CS1660:无法将lambda表达式转换为类型'string',因为它不是委托类型'..@Asinox您必须将包含Categories
的实例作为第二个参数传递。很抱歉,我试图遵循此操作,但我遇到了以下问题:@Html.DropDownList(model=>model.CategoryID,“Categories”),错误:CS1660:无法将lambda表达式转换为类型“string”,因为它不是委托类型“…..@Asinox您必须将包含类别的实例作为第二个参数传递