0

ASP.NET MVC (Razor) プロジェクトでListBoxは、編集ビューで複数選択オプションを使用しています。

コントローラ

    public ActionResult Edit(int id)
    {
        Post post = db.Posts.Find(id);
        string selectedValues = post.Tags; //This contains Selected values list (Eg: "AA,BB")
        ViewBag.Tagslist = GetTags(selectedValues.Split(','));
        return View(post);
    }

    private MultiSelectList GetTags(string[] selectedValues)
    {
        var tagsQuery = from d in db.Tags
                        orderby d.Name
                        select d;
        return new MultiSelectList(tagsQuery, "Name", "Name", selectedValues);

    }

HTML

    <div class="editor-field">
        @Html.ListBox("Tags", ViewBag.Tagslist as MultiSelectList)
    </div>

これにより、アイテム (タグ リスト) が に読み込まれますListBoxが、リスト内のアイテムは強調表示されませんSelected Values

この問題を解決するにはどうすればよいですか?

前もって感謝します。

4

1 に答える 1

2

あなたのPostクラス(ビューが強く型付けされている)には、というプロパティがあると思われますTags。ヘルパーTagsの最初の引数としても使用します。ListBoxこれは、ヘルパーが最初にこのプロパティを調べて、 に渡した選択された値を無視することを意味しますMultiSelectList。したがって、選択した値を設定する正しい方法は次のとおりです。

public ActionResult Edit(int id)
{
    Post post = db.Posts.Find(id);
    ViewBag.Tagslist = GetTags();
    return View(post);
}

private MultiSelectList GetTags()
{
    var tagsQuery = from d in db.Tags
                    orderby d.Name
                    select d;
    return new MultiSelectList(tagsQuery, "Name", "Name");

}

そしてビューで:

<div class="editor-field">
    @Html.ListBoxFor(x => x.Tags, ViewBag.Tagslist as MultiSelectList)
</div>

そして、これを説明する完全な例を次に示します。

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var post = new Post
        {
            Tags = new[] { "AA", "BB" }
        };
        var allTags = new[]
        {
            new { Name = "AA" }, new { Name = "BB" }, new { Name = "CC" },
        };
        ViewBag.Tagslist = new MultiSelectList(allTags, "Name", "Name");
        return View(post);
    }
}

また、ドメイン エンティティをビューに渡す代わりに、ビュー モデルを使用することをお勧めします。したがって、あなたには typePostViewModelという名前のプロパティがあります。このようにして、弱い型付けを取り除くことができます。AllTagsMultiSelectListViewBag

于 2012-06-18T06:00:11.173 に答える