#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, поскольку оно не будет сохранено.