jQuery MultiSelect dropdownlist如何访问结果?

jQuery MultiSelect dropdownlist如何访问结果?,jquery,asp.net-mvc-3,razor,Jquery,Asp.net Mvc 3,Razor,如何从一个mvc3/razor调用的JQUery多选下拉列表中获取结果 multiselect插件使用[]符号将所选值发送到服务器。我们总是从编写视图模型开始: public class MyViewModel { public IEnumerable<string> SelectedValues { get; set; } public IEnumerable<SelectListItem> Items { get

如何从一个mvc3/razor调用的JQUery多选下拉列表中获取结果


multiselect插件使用
[]
符号将所选值发送到服务器。我们总是从编写视图模型开始:

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" },
            };
        }
    }
}
相应的观点:

@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>
}
最后一部分是在
应用程序\u Start
中注册模型绑定器:

ModelBinders.Binders.Add(typeof(IEnumerable<string>), new MultiSelectModelBinder());
ModelBinders.Binders.Add(typeof(IEnumerable),新的MultiSelectModelBinder());

请尝试此操作以获取选定的值

public ActionResult Index(MyViewModel model, FormCollection collection)
    {
        string selectedValues=collection["SelectedValues[]"]; //here you get comma separated values
        return View(model);
    }

实际上,您还可以通过向操作添加参数来接收所选值

例如,假设您有以下列表框:

//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()...
}
//控制器获取
公共操作结果ManageUsers()
{
ViewBag.Users=新选择列表(repository.GetAllUsers(),“Id”,“Email”);
返回视图();
}
//看法
@Html.ListBox(ViewBag.Users作为SelectList,新建{@id=“Users”})
//控制站
[HttpPost]
public ActionResult ManageUsers(列出用户)
{
//管理将显示在列表中的所有选定用户。
返回视图()。。。
}

我相信你也可以使用数组作为类型,而不是泛型列表,虽然我自己没有尝试过,但关键是将参数命名为与列表框的html元素id相同的名称。

这是一个很棒的小快捷方式,而不是通过[]模型的迭代器。谢谢
public ActionResult Index(MyViewModel model, FormCollection collection)
    {
        string selectedValues=collection["SelectedValues[]"]; //here you get comma separated values
        return View(model);
    }
//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()...
}