【问题标题】:Razor MVC 3, Dropdownlist in ViewBag - Help understanding this piece of codeRazor MVC 3,ViewBag 中的 Dropdownlist - 帮助理解这段代码
【发布时间】:2013-01-25 00:18:03
【问题描述】:

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

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

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)

这是我的疑问。不指定 ViewBag,MVC 怎么知道在哪里找到正确的列表??

【问题讨论】:

    标签: asp.net-mvc razor viewbag html-select


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢你的解释。由于我对 MVC 不是很熟悉,所以一切似乎都发生得如此神奇。
    【解决方案2】:

    事实:



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

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

    【讨论】:

    • 谢谢。你的回答与@heads5150 一起帮助我更好地理解了一点。
    猜你喜欢
    • 2011-02-21
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-15
    相关资源
    最近更新 更多