1

我是 MVC 的新手,我无法理解一段代码。我创建了一个新控制器以及所有 CRUD 方法和视图 - 由 Visual Studio 自动生成 - 我无法理解代码的一部分。

看,在控制器中,它从数据库中设置了一个 SelectList 并将其放入 ViewBag 中,如下所示: Controller

public ActionResult Create()
{    
    ViewBag.TypeID = new SelectList(db.PlacementTypes, "TypeID", "Description");
    return View();
} 

在视图中是这样的:

<div class="editor-label">
    @Html.LabelFor(model => model.TypeID, "PlacementType")
</div>
<div class="editor-field">
    @Html.DropDownList("TypeID", String.Empty)
    @Html.ValidationMessageFor(model => model.TypeID)
</div>

我不明白的是。SelectList 到底是从哪里来的?因为我没有看到对 ViewBag 的调用。

我希望是这样的:

@Html.DropDownListFor("TypeID", (SelectList)ViewBag.TypeID)

这是我的疑问。MVC 如何知道在哪里可以找到正确的列表而不指定 ViewBag?

4

2 回答 2

1

由于您已将 DropDownList 命名为“TypeID”,因为没有提供 SelectList,代码将在模型中搜索名为“TypeID”的项目。

因此,调用 ViewBag.TypeID 以获取 SelectList 是在幕后进行的。

于 2013-01-25T00:33:15.913 回答
0

事实:



在您的示例中,您不必强制转换 SelectList ViewBag,因为 ViewBag 是动态类型。

TypeID 的 SelectList 部分功能已经在您的Controller部分完成。
因此,在您的创建中单独调用 TypeID 将触发它下面的所有内容。

于 2013-01-25T06:42:50.547 回答