6

我是 MVC 的新手,所以也许这是一个愚蠢的问题 - 我试图了解 asp.net mvc 中的强类型视图。我正在开发版本 3。如果我有一个包含 2 个模型的项目 - 比如说 Person 和 Department。一个人必须属于一个部门。所以我有我的部门模型(并且我已经生成了我的控制器和 CRUD 接口):

public class Department
{
    public int Id { get; set;}
    public string DeparmentName { get; set;}
}

然后我有一个引用 Department 的 Person 模型:

public class Person
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public int Department_Id { get; set; }
    [ForeignKey("Department_Id")
    public virtual Department Department { get; set;}
}

现在我生成我的控制器和视图。现在,当我查看 PersonController 时,我对 Create 有以下内容:

public ActionResult Create()
{
    ViewBag.Department_Id = new SelectList(db.Deparments, "Id", "DepartmentName");
    return View();
}

在 Person\Create.cshtml 中,创建部门下拉列表的代码是

@Html.DropDownList("Department_Id", String.Empty)

据我了解,DropDownList Html 助手正在使用 ViewBag 创建我的下拉列表。但是,FirstName 和 LastName 似乎在不依赖 ViewBag 的情况下创建了它们的输入字段 - 所以在我的视图中,我可以在编译时检查我的 FirstName 和 LastName 字段,因为我的视图是强类型的,但不是在我的 DropDownList 上。

部门的 DropDownList 没有强类型,或者我做错了什么并且有办法使它强类型?

谢谢 :)

4

2 回答 2

5

您需要 viewbag 的原因是因为您的视图绑定到的 Person 实例没有所有可能部门的数据,只有它所属的一个部门。这一行会发生什么:

ViewBag.Department_Id = new SelectList(db.Deparments, "Id", "DepartmentName");

是否将数据库中的所有部门都添加到选择列表(供您的下拉菜单绑定到),ID 为键,部门名称为值。将视图绑定到 Person 后,下拉列表将显示相应的部门。

于 2011-08-16T08:44:16.353 回答
2

如果你使用强类型视图,你应该有一个传递给视图的强类型模型:

public class ViewData {
   public IList<Departments> Departments {get; set;}
}

然后在你的控制器中你有:

public ActionResult Create()
{
    ViewData model = new ViewData();
    model.Departments = db.Deparments;
    return View(model);
 }

最后一步是创建选择列表并下拉视图:

@model ViewData
@SelectList list = new SelectList(Model.Deparments, "Id", "DepartmentName");
@Html.DropDownList("Department_Id", list);

希望这是有道理的。

于 2011-08-16T08:39:30.927 回答