我一直在关注列表框的一些指导并尝试正确处理选择。什么是困扰我,我似乎无法找到相关的材料是访问所选的值。可能只有一个被选中,但最有可能的是一次选择多个。
我的帖子控制器正在获取对象模型,它具有所选项目之一的值,但不是全部的值?我是否需要在帖子之前运行一些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
答案 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; }
}
下面发布的所选项目的图片: