首页 > 解决方案 > 如何从 ListBoxFor 中选择多个项目并传递给控制器​​ Post 方法

问题描述

如何在列表框中选择多个将传递给控制器​​的 Postmodel参数的项目?我可以通过按住 CTRL 物理选择多个,但是当我提交时,我收到验证错误消息,“字段 TagId 必须是一个数字。” 它只提交选择了一项。

创建显示多个选定项目的视图表单

列表框

@Html.ListBoxFor(model => model.allTags[0].TagId, new SelectList(Model.allTags, "TagId", "Name"), new { @class = "form-control", @Id = "SelectTags", @style = "width:200px;height:300px;" })

控制器 Post 方法

        [HttpPost]
        public ActionResult Create(CreateRecipe model) 
        {
            try
            {
                // TODO: Add insert logic here

                return RedirectToAction("ViewRecipes");
            }
            catch
            {
                return View();
            }
        }

谢谢

标签: c#.netasp.net-mvcvisual-studiohtml.listboxfor

解决方案


您可以尝试以下代码从 ListBoxFor 中选择多个项目并将其传递给控制器​​ Post 方法。

控制器:

 public class TestController : Controller
    {
        // GET: Test
        public ActionResult Index()
        {
            var model = new UserModel
            {
                SelectedTeaIds = new[] { 3 },
                TeaList = GetAllTeaTypes()
            };
            return View(model);
        }

        [HttpPost]
        public ActionResult Index(UserModel model)
        {
            model.TeaList = GetAllTeaTypes();
            if (model.SelectedTeaIds != null)
            {
                List<SelectListItem> selectedItems = model.TeaList.Where(p => model.SelectedTeaIds.Contains(int.Parse(p.Value))).ToList();
                foreach (var Tea in selectedItems)
                {
                    Tea.Selected = true;
                    ViewBag.Message += Tea.Text + " | ";
                }
            }
            return View(model);
        }

        public List<SelectListItem> GetAllTeaTypes()
        {
            List<SelectListItem> items = new List<SelectListItem>();
            items.Add(new SelectListItem { Text = "General Tea", Value = "1" });
            items.Add(new SelectListItem { Text = "Coffee", Value = "2" });
            items.Add(new SelectListItem { Text = "Green Tea", Value = "3" });
            items.Add(new SelectListItem { Text = "Black Tea", Value = "4" });
            return items;
        }
    }

模型:

public class UserModel
    {
        public int[] SelectedTeaIds { get; set; }
        public IEnumerable<SelectListItem> TeaList { get; set; }
    }

索引.cshtml:

@using WebApplication1.Models
@using System
@model UserModel
@{
    ViewBag.Title = "Index";
}


<b>Select Tea Type: </b>
<br />

@using (Html.BeginForm("Index", "Test", FormMethod.Post))
{
    <b>Select Tea Type: </b>
    <br />
    @Html.ListBoxFor(x => x.SelectedTeaIds, Model.TeaList, new { style = "width:200px" })
    <br />
    <input type="submit" value="submit" />
}

<h4>You Selected</h4>
<b style="color:red">Tea Type: @ViewBag.Message</b>

结果:

在此处输入图像描述


推荐阅读