0

我正在尝试在 mvc 音乐商店的商店内添加搜索标题和流派下拉列表。这是我完成的程序

首先,我将以下代码添加到 StoreManagere 控制器中

public ActionResult SearchIndex(string musicGenre, string searchString)
    {

        var GenreLST = new List<string>();

        var GenreQry = from d in db.Genres
                       orderby d.Name
                       select d.Name;

        GenreLST.AddRange(GenreQry.Distinct());
        ViewBag.movieGenre = new SelectList(GenreLST);

        var musics = from m in db.Albums.Include(a => a.Genre).Include(a => a.Artist)
                     select m;

        if (!string.IsNullOrEmpty(searchString))
        {
            musics = musics.Where(s => s.Title.Contains(searchString));
        }

        if (string.IsNullOrEmpty(musicGenre))
            return View(musics);
        else
        {
            return View(musics.Where(x => x.Genre.Name == musicGenre));
        }

    }

以及搜索索引视图页面中的以下代码

    @model IEnumerable<MvcMusicStore.Models.Album>


@{
    ViewBag.Title = "SearchIndex";

}

<h2>SearchIndex</h2>

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

    @using (Html.BeginForm()) {
            <p>Genre : @Html.DropDownList("musicGenre", "All")
            Title : @Html.TextBox("searchString")
            <input type="submit" value="Filetr" /></p>
    }
</p>
<table>
    <tr>
        <th>
            Genre
        </th>
        <th>
            Artist
        </th>
        <th>
            Title
        </th>
        <th>
            Price
        </th>
        <th></th>
    </tr>

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

</table>

但我得到这个错误

没有具有键“musicGenre”的“IEnumerable”类型的 ViewData 项。

4

1 回答 1

1

您将流派列表保存在 ViewBag.movi​​eGenre 而不是 musicGenre 中。这就是为什么它不起作用。

于 2013-08-01T16:16:20.827 回答