外网的.net mvc razor下拉列表

时间:2011-06-16 03:47:56

标签: .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 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中。

希望这是有道理的。

1 个答案:

答案 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类型。