JQuery MultiSelect раскрывающийся список, как получить доступ к результатам? - PullRequest
2 голосов
/ 19 октября 2011

Как я могу получить результаты из выпадающего списка JQUery Multi-select, который вызывается для mvc3 / бритвы?

http://abeautifulsite.net/blog/2008/04/jquery-multiselect/

Ответы [ 3 ]

6 голосов
/ 19 октября 2011

Плагин множественного выбора использует нотацию [] для отправки выбранных значений на сервер.Как всегда, мы начинаем с написания модели представления:

public class MyViewModel
{
    public IEnumerable<string> SelectedValues { get; set; }

    public IEnumerable<SelectListItem> Items
    {
        get
        {
            return new[]
            {
                new SelectListItem { Value = "1", Text = "item 1" },
                new SelectListItem { Value = "2", Text = "item 2" },
                new SelectListItem { Value = "3", Text = "item 3" },
            };
        }
    }
}

, затем контроллера:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View(new MyViewModel());
    }

    [HttpPost]
    public ActionResult Index(MyViewModel model)
    {
        return View(model);
    }
}

соответствующего представления:

@model MyViewModel

<script src="@Url.Content("~/Scripts/jquery.multiSelect.js")" type="text/javascript"></script>
<script type="text/javascript">
    $(function () {
        $("#SelectedValues").multiSelect();
    });
</script>

@using (Html.BeginForm())
{
    @Html.ListBoxFor(x => x.SelectedValues, Model.Items)
    <button type="submit">OK</button>
}

и, наконец, связывателя моделисвязан с типом IEnumerable<string> и будет работать с нотацией [], используемой плагином:

public class MultiSelectModelBinder : DefaultModelBinder
{
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var model = (MyViewModel)base.BindModel(controllerContext, bindingContext);
        var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName + "[]");
        if (value != null)
        {
            return value.RawValue;
        }
        return model;
    }
}

Последняя часть состоит в регистрации связывателя модели в Application_Start:

ModelBinders.Binders.Add(typeof(IEnumerable<string>), new MultiSelectModelBinder());
2 голосов
/ 19 октября 2011

Пожалуйста, попробуйте это, чтобы получить выбранные значения

public ActionResult Index(MyViewModel model, FormCollection collection)
    {
        string selectedValues=collection["SelectedValues[]"]; //here you get comma separated values
        return View(model);
    }
0 голосов
/ 08 ноября 2011

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

Например, допустим, у вас есть следующий список:

//Controller GET
public ActionResult ManageUsers()
{
    ViewBag.Users = new SelectList(repository.GetAllUsers(), "Id", "Email");
    return View();
}

//View
@Html.ListBox(ViewBag.Users as SelectList, new { @id = "users" })

//Controller POST
[HttpPost]
public ActionResult ManageUsers(List<int> users)
{
    //Manage all the selected users which will appear in the List.

    return View()...
}

Я полагаю, что вы можете иметь массив как тип вместо общего списка, так как я не пробовал сам, однако, ключ в том, чтобы присвоить параметру имя, совпадающее с идентификатором элемента html для списка.

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