MVC ListBox多选在post上的控制器中只有一个值

时间:2014-02-17 14:06:22

标签: c# asp.net asp.net-mvc asp.net-mvc-3 razor

我一直在关注列表框的一些指导并尝试正确处理选择。什么是困扰我,我似乎无法找到相关的材料是访问所选的值。可能只有一个被选中,但最有可能的是一次选择多个。

我的帖子控制器正在获取对象模型,它具有所选项目之一的值,但不是全部的值?我是否需要在帖子之前运行一些jquery,正如其他文章所说的那样?似乎不对,但也许......

我的模特:

public partial class ExtrnlSubsModel : BaseEntityModel
{
    public IList<SelectListItem> AvailableForums { get; set; }
    public int ExtForumId { get; set; }
}

我的剃刀:

@Html.ListBoxFor(model => model.ExtForumId, Model.AvailableForums, new { style = "width:500px;height:250px" })
@Html.RequiredHint()
@Html.ValidationMessageFor(model => model.ExtForumId)

我的控制器:

[HttpPost]
public ActionResult ExtForumAdd(ExtrnlSubsModel model)
{ .... }

因此,正如我所提到的那样,我的模型已经填充,但只有一个选择,尽管有ctrl点击了很多项目。

TIA

1 个答案:

答案 0 :(得分:5)

更改模型以使用MultiSelect和所选项目的int数组(为简单起见,部分删除):

public class ExtrnlSubsModel
{
    public MultiSelectList AvailableForums { get; set; }
    public int[] ExtForumIds { get; set; }
}

将您的列表框更改为此,首先使用您的ints属性数组:

@Html.ListBoxFor(model => model.ExtForumIds, Model.AvailableForums, new { style = "width:500px;height:250px" })

出于测试目的,控制器可以采取行动:

public ActionResult Index()
{       
        var items = new List<SelectItem>();
        // These items would be set from your db
        var items = new List<SelectItem>();
        items.Add(new SelectItem { Id = 1, Name = "1" });
        items.Add(new SelectItem { Id = 2, Name = "2" });

        var selectedItems = new List<SelectItem>();
        selectedItems.Add(new SelectItem { Id = 1, Name = "1" });

        var model = new ExtrnlSubsModel();
        // project the selected indexs to an array of ints
        int[] selectedItemsArray = selectedItems.Select(s => s.Id).ToArray();
        model.ExtForumIds = selectedItemsArray;
        model.AvailableForums = new MultiSelectList(items, "ID", "Name", selectedItemsArray);

    return View(model);
}

发布行动:

[HttpPost]
public ActionResult Index(ExtrnlSubsModel model)
{
    var selectedItems = model.ExtForumIds;
    return View(model);
}

我还使用了测试SelectItem进行演示,这将是您要返回的对象:

public class SelectItem
{
    public int Id { get; set; }
    public string Name { get; set; }
}

下面发布的所选项目的图片:

Screen grab