Asp.net mvc Razor MVC 3,ViewBag中的Dropdownlist-帮助理解这段代码

Asp.net mvc Razor MVC 3,ViewBag中的Dropdownlist-帮助理解这段代码,asp.net-mvc,razor,viewbag,html-select,Asp.net Mvc,Razor,Viewbag,Html Select,我是MVC新手,理解一段代码有困难。 我创建了一个新的控制器,所有的CRUD方法和视图都是由VisualStudio自动生成的,但我无法理解其中的一部分代码 请参见,在控制器中,它从数据库中设置一个SelectList,并将其放入一个ViewBag中,如下所示: 控制器 public ActionResult Create() { ViewBag.TypeID = new SelectList(db.PlacementTypes, "TypeID", "Description")

我是MVC新手,理解一段代码有困难。 我创建了一个新的控制器,所有的CRUD方法和视图都是由VisualStudio自动生成的,但我无法理解其中的一部分代码

请参见,在控制器中,它从数据库中设置一个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>

这是我的疑问。MVC如何知道在不指定ViewBag的情况下从何处找到正确的列表???

因为您将DropDownList命名为“TypeID”,因为没有SelectList,只要代码将在模型中搜索名为“TypeID”的项


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

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

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

事实:

  • ViewBag是Scott Guthrie早些时候发布的最酷的功能之一。 它用于将数据从控制器传递到视图,与使用ViewData[]dictionary相同。

  • ViewBag(除了它的名称之外)的优点在于它是一种动态的类型,这意味着您可以动态地获取/设置值并添加任意数量的附加字段,而不需要强类型的类。
    (参考:


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

TypeID的SelectList部件功能已经在您的控制器部件上完成。
因此,在create上单独调用TypeID将触发它下面的所有内容。

事实:

  • ViewBag是Scott Guthrie早些时候发布的最酷的功能之一。 它用于将数据从控制器传递到视图,与使用ViewData[]dictionary相同。

  • ViewBag(除了它的名称之外)的优点在于它是一种动态的类型,这意味着您可以动态地获取/设置值并添加任意数量的附加字段,而不需要强类型的类。
    (参考:


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

TypeID的SelectList部件功能已经在您的控制器部件上完成。

因此,在您的创建中单独调用TypeID已经触发了它下面的所有内容。

谢谢您的解释。因为我对MVC不是很熟悉,一切似乎都发生得很神奇。谢谢您的解释。因为我对MVC不是很熟悉,一切似乎都发生得很神奇。谢谢。您的回答是:oguether和@heads5150一起帮助我更好地理解。谢谢。你的回答和@heads5150一起帮助我更好地理解。
@Html.DropDownListFor("TypeID", (SelectList)ViewBag.TypeID)