Bootstrap Multiselect在HttpPost上获取选定值

时间:2015-04-06 07:12:12

标签: asp.net-mvc twitter-bootstrap asp.net-mvc-4

我使用此Bootstrap Multiselect,我的问题是我无法在ASP.Net MVC上获取HttpPost上的选定值。

遇到的问题:

  • 单击“保存”后,仅显示第一个选定的值 该模型。 (的解决

  • 单击“保存”后,仅显示第一个选定的值 下拉列表。

Sample.chtml:

@model SampleProject.Models.SampleViewModel

@using (Html.BeginForm())
{
    @Html.DropDownListFor(model => model.Selected, new SelectList(Model.List, "value", "text"), new { @class = "multiselect form-control", multiple = "multiple" })
    <input type="submit" value="Save" />
}

型号:

public class SampleViewModel
{
    public string[] Selected { get; set; }
    public SelectList List { get; set; }
}

控制器:

public class DashboardController : Controller
{
    public ActionResult Sample()
    {
        SampleViewModel model = new SampleViewModel();
        model.List = new SelectList(new List<string>() { "1", "2", "3" });

        return View(model);
    }

    [HttpPost]
    public ActionResult Sample(SampleViewModel model)
    {
        model.List = new SelectList(new List<string>() { "1", "2", "3" });

        return View(model);
    }
}

选择:

Selection

我无法在HttpPost上正确获取所选值

代码背后/ HttpPost :(错误) HttpPost

HttpPost后:(正确)

After

2 个答案:

答案 0 :(得分:12)

A <select multiple="multiple">发回一组值(不是单个值)。您的财产Selected必须为IEnumerable,例如

public string[] Selected { get; set; }

附注:由于text和value属性相同,因此您可以通过List属性SelectList

来简化代码
public SelectList List { get; set; }

然后在控制器中

model.List = new SelectList(new List<string>() { "1", "2", "3" })

(虽然不清楚为什么你不会使用int

答案 1 :(得分:5)

在任何地方都没有看到这个答案,所以要在帖子后面只选择一个项目来解决问题,你需要使用:

@Html.ListBoxFor(.. 
instead of @Html.DropDownListFor