selectedValues
ASP.NET MVC (Razor) プロジェクトで、編集ビューで複数選択オプション付きの ListBox を使用しています。 in を使用して以前に選択した項目を強調表示する際に問題があったため、以前MultiSelectList
にSO について質問しました。その質問に対する回答によると、を使用せずにデータをビューに渡すためにViewModel(AutoMapperを使用)を使用することにしましたViewBag
が、それでも同じ問題があります..selectedValues
リストで指定されたアイテムを選択しません
これは私の新しいコードです
モデル
public class Post
{
public int Id { get; set; }
...
public string Tags { get; set; }
}
public class PostEditViewModel
{
private DocLibraryContext db = new DocLibraryContext();
public int Id { get; set; }
..
public MultiSelectList TagsList { get; set; }
}
コントローラ
public ActionResult Edit(int id)
{
Post post = db.Posts.Find(id);
PostEditViewModel postEditViewModel = Mapper.Map<Post, PostEditViewModel>(post);
var tagsQuery = from d in db.Tags
orderby d.Name
select d;
postEditViewModel.TagsList = new MultiSelectList(tagsQuery, "Id", "Name", post.Tags.Split(','));
return View(postEditViewModel);
}
見る
<div class="editor-field">
@Html.ListBoxFor(model => model.Tags, Model.TagsList as MultiSelectList)
</div>
ここで何が間違っていますか?助けてください....
更新 1:
コントローラーを
public ActionResult Edit(int id)
{
Post post = db.Posts.Find(id);
PostEditViewModel postEditViewModel = Mapper.Map<Post, PostEditViewModel>(post);
var tagsQuery = from d in db.Tags
orderby d.Name
select d;
var selectedIds = post.Tags.Split(',').Select(n => tagsQuery.First(t => t.Name == n));
postEditViewModel.TagsList = new MultiSelectList(tagsQuery, "Id", "Name", selectedIds);
return View(postEditViewModel);
}
しかし、私は同じ結果を得ます。
更新 2:
(このチュートリアルのように) コードを変更してみましたが、うまくいきましたが、以前の方法を使用する必要があります..
モデル
public Post Post { get; set; }
public MultiSelectList TagsList { get; set; }
public PostEditViewModel(Post post)
{
Post = post;
var tagsQuery = from d in db.Tags
orderby d.Name
select d;
TagsList = new MultiSelectList(tagsQuery, "Name", "Name", post.Tags.Split(','));
}
コントローラ
public ActionResult Edit(int id)
{
Post post = db.Posts.Find(id);
return View(new PostEditViewModel(post));
}
見る
<div class="editor-field">
@Html.ListBox("Tags", Model.TagsList as MultiSelectList)
</div>
違いは何ですか...??