C# MVC列表框多个选择—在控制器上的post中只有一个值

C# MVC列表框多个选择—在控制器上的post中只有一个值,c#,asp.net,asp.net-mvc,asp.net-mvc-3,razor,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 3,Razor,我一直在遵循列表框的一些指导,并试图正确处理选择。让我感到困惑的是,我似乎无法在上找到相关材料,而是访问了所选的值。可能只选择了一个,但很可能一次会选择多个 我的post controller正在获取对象模型,它具有一个选定项目的值,但不是所有项目的值?我是否需要像其他文章所说的那样在发布前运行jquery?似乎不对,但也许 我的模型: public partial class ExtrnlSubsModel : BaseEntityModel { public IList<Sel

我一直在遵循列表框的一些指导,并试图正确处理选择。让我感到困惑的是,我似乎无法在上找到相关材料,而是访问了所选的值。可能只选择了一个,但很可能一次会选择多个

我的post controller正在获取对象模型,它具有一个选定项目的值,但不是所有项目的值?我是否需要像其他文章所说的那样在发布前运行jquery?似乎不对,但也许

我的模型:

public partial class ExtrnlSubsModel : BaseEntityModel
{
    public IList<SelectListItem> AvailableForums { get; set; }
    public int ExtForumId { get; set; }
}
我的控制器:

[HttpPost]
public ActionResult ExtForumAdd(ExtrnlSubsModel model)
{ .... }
所以,正如我提到的,我的模型会被填充,但只使用一个选项,尽管ctrl键单击了许多项


TIA

更改您的模型,以便对所选项目使用
多选
和整数数组,如下所示(为简单起见,部分删除):

将列表框更改为此,首先使用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);
}
我还在演示中使用了一个test
SelectItem
,这将是您返回的对象:

public class SelectItem
{
    public int Id { get; set; }
    public string Name { get; set; }
}
所选项目的图片张贴在下面:


非常感谢您的教育。我对mvc不是很了解,你非常完整的答案帮助我学习。非常感谢。你是说SelectItem还是打字错误?我找不到那个类或google名称空间?嗨,不,这只是一个示例类,带有我创建的Id和名称,因为我看不到你的类代码。答案中有这一点的来源。您可以使用已经有名称&Id的类。我想它应该类似于ExtFormId&FormName或数据库中的类似内容。:)好吧,因为我就是这么做的。谢谢
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);
}
public class SelectItem
{
    public int Id { get; set; }
    public string Name { get; set; }
}