1

参考asp.net MVC教程: http ://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/cs/examineing-the-edit-methods-and-edit-view

关于自动生成的 Views\Movies\SearchIndex.cshtml

问题一:

<p>
@Html.ActionLink("Create New", "Create")

@using (Html.BeginForm())
{
    <p>
        Genre: @Html.DropDownList("movieGenre", "All")
        Title: @Html.TextBox("SearchString", "Movies", FormMethod.Get)
        <input type="submit" value="Filter" />
    </p>
}
</p>

movieGenre是如何引用@ViewBag.movi​​eGenre的,这显然是在 Controllers/MoviesController.cs 中定义的

问题2:

@foreach (var item in Model) {
<tr>
    <td>
        @Html.DisplayFor(modelItem => item.Title)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.ReleaseDate)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Genre)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Price)
    </td>
    <td>
        @Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
        @Html.ActionLink("Details", "Details", new { id=item.ID }) |
        @Html.ActionLink("Delete", "Delete", new { id=item.ID })
    </td>
</tr>
}

modelItem在哪里定义?VS2010 向我展示了 modelItem 是

IEnumerable <MvcMovie.Model.Movie>

谢谢。

4

1 回答 1

1

看起来你已经回答了你的第二个问题,所以我只回答你的第一个问题:

如果没有提供数据,助手将默认绑定到它Html.DropDownList。只是字典周围的动态包装器,因此当您设置时,您实际上是在设置.ViewDataViewBagViewDataViewBag.movieGenre = new SelectList()ViewData["movieGenre"] = new SelectList()

现在您的 中已包含此SelectList内容ViewData,以下内容将自动将其绑定到下拉列表:

@Html.DropDownList("movieGenre")

这种隐式绑定没有很好的记录。浏览此处获取更多信息:

http://weblogs.asp.net/pjohnson/archive/2012/10/26/mvc-s-html-dropdownlist-and-quot-there-is-no-viewdata-item-of-type-ienumerable-lt- selectlistitem-gt-that-has-the-key.aspx

于 2013-03-12T15:33:27.710 回答