【问题标题】:How to select multiple items from ListBoxFor and pass to controller Post method如何从 ListBoxFor 中选择多个项目并传递给控制器​​ Post 方法
【发布时间】:2021-01-05 22:59:05
【问题描述】:

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

Create View Form showing multiple items selected

列表框

@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# .net asp.net-mvc visual-studio html.listboxfor


    【解决方案1】:

    您可以尝试以下代码从 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; }
        }
    

    Index.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>
    

    结果:

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多