ListBox для не привязки моей viewmodel - PullRequest
5 голосов
/ 01 ноября 2011

Я знаю, что этот вопрос был задан довольно много на SO.

здесь а также здесь

Но я все еще не могу понять проблему.

Я занимаюсь разработкой блога, чтобы научить себя основам MVC. Теперь, когда я публикую вид ниже, помощник ListBoxFor не привязывает никаких значений к моей модели. Список успешно содержит все категории, но когда POST-контроллер возвращает модель представления, объект Categories становится пустым.

Вот модель взгляда:

public class PostViewModel
{
    public Post Posts { get; set; }
    public IEnumerable<Category> Categories { get; set; }
}

Контроллер:

    public ActionResult Create()
    {
        PostViewModel post = new PostViewModel();
        post.Categories = db.ListCategories();
        return View(post);
    }

Вид:

<p>@Html.ListBoxFor(model => model.Categories, new MultiSelectList(Model.Categories, "CategoryID", "CategoryName"))</p>

Ответы [ 2 ]

9 голосов
/ 01 ноября 2011

Я полагаю, у вас должно быть свойство массива в вашей модели представления, к которому будут привязаны выбранные идентификаторы.

public class PostViewModel
{
    public Post Posts { get; set; }
    public int[] SelectedCategoryIds { get; set; }
    public IEnumerable<Category> Categories { get; set; }
}

И измените свой Html.ListBoxFor вызов на свойство SelectedCategoryIds.

<p>@Html.ListBoxFor(model => model.SelectedCategoryIds, new MultiSelectList(Model.Categories, "CategoryID", "CategoryName"))</p>

В качестве отступления: теперь, когда вы создаете список для свойства SelectedCategoryIds, если у вас есть метка для списка, вы должны изменить это значение на свойство SelectedCategoryIds.

@Html.LabelFor(model => model.SelectedCategoryIds, "Categories")

("Categories" - текст метки)

2 голосов
/ 01 ноября 2011

Не уверен на 100%, понимаю ли я ваш вопрос;но помогает ли этот код?Он показывает, как вы можете выбрать, какие категории были выбраны при отправке формы обратно на сервер.

[HttpPost]
public ActionResult Create(Post post, FormCollection formCollection) 
{
  var listOfCategoryIDs = formCollection["categories"];
  var arrayOfCategoryIDs = listOfCategoryIDs.Split(',');
}
...