微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从ListBoxFor中选择多个项目并传递给控制器​​的Post方法

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

如何在列表框中选择多个项目,这些项目将传递到控制器的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();
            }
        }

谢谢

解决方法

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

结果:

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。