1

asp.net MVC チュートリアルを参照してください: http://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/cs/examining-the-edit-methods-and-edit-view

自動生成された Views\Movies\SearchIndex.cshtml について

質問1:

<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

2番目の質問にはすでに回答しているようですので、最初の質問に答えます。

データが提供されていない場合、Html.DropDownListヘルパーはViewDataデフォルトで自身をバインドします。ViewBagは単にViewData辞書の動的ラッパーであるため、設定ViewBag.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 に答える