MultiSelectList не возвращает данные просмотра - PullRequest
1 голос
/ 18 апреля 2011

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

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

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

        Interaction interact = new Interaction();

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

        return View( model );
    }

На мой взгляд, listBox:

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

Может кто-нибудь сказать мне, где я не прав?

1 Ответ

4 голосов
/ 18 апреля 2011

Вы не должны связываться с 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, поскольку оно не будет сохранено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...