MultiSelectList не возвращает данные для просмотра

#asp.net-mvc-3 #razor

#asp.net-mvc-3 #razor

Вопрос:

На мой взгляд, у меня есть список множественного выбора для отправки контроллеру списка пользователей. Мой просмотр получает пользователей, но не отправляет обратно контроллеру. Чего я не понимаю?

Мой контроллер:

         // GET:
    public ActionResult Create(User user)
    {
        ViewModel model = new ViewModel();

        Interaction interact = new Interaction();

        model.Users= Repository.GetUsers();
        model.Interacao = interact;

        return View( model );
    }
  

На мой взгляд, поле списка является:

 @Html.ListBoxFor( model => model.Users, new MultiSelectList( Model.Users, "Id", "Name" ) )
  

Кто-нибудь может сказать мне, где я ошибаюсь?

Ответ №1:

Вы не должны использовать привязку с model.Users в качестве первого аргумента, поскольку это представляет список. Первым аргументом должен быть массив строк / целых чисел, который будет содержать выбранные значения:

Пример:

 public class MyViewModel
{
    pubilc string[] SelectedUserIds { get; set; }
    public IEnumerable<UserViewModel> Users { get; set; }
}

public class UserViewModel
{
    public string Id { get; set; }
    public string Name { get; set; }
}
  

и затем:

 @Html.ListBoxFor( 
    model => model.SelectedUserIds, 
    new MultiSelectList(Model.Users, "Id", "Name") 
)
  

который будет успешно привязан к:

 [HttpPost]
public ActionResult Index(string[] selectedUserIds) { ... }
  

или:

 [HttpPost]
public ActionResult Index(MyViewModel model) { ... }
  

но, конечно, во втором случае вы получите только заполненное SelectedUserIds свойство, поскольку это единственное, что отправляется из представления. Если вам нужно повторно отобразить тот же вид (например, из-за ошибок модели), вам нужно будет повторно заполнить Users свойство collection модели vie, поскольку оно не будет сохранено.