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

GPG*_*GVM 4 c# asp.net asp.net-mvc razor asp.net-mvc-3

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

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

我的模特:

public partial class ExtrnlSubsModel : BaseEntityModel
{
    public IList<SelectListItem> AvailableForums { get; set; }
    public int ExtForumId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我的剃刀:

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

我的控制器:

[HttpPost]
public ActionResult ExtForumAdd(ExtrnlSubsModel model)
{ .... }
Run Code Online (Sandbox Code Playgroud)

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

TIA

hut*_*oid 5

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

public class ExtrnlSubsModel
{
    public MultiSelectList AvailableForums { get; set; }
    public int[] ExtForumIds { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

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

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

出于测试目的,控制器获取操作:

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);
}
Run Code Online (Sandbox Code Playgroud)

发布动作:

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

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

public class SelectItem
{
    public int Id { get; set; }
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

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

屏幕抓取