【问题标题】:ASP.NET MVC - Checkbox list not returning all comma separated valuesASP.NET MVC - 复选框列表未返回所有逗号分隔值
【发布时间】:2018-11-22 13:00:38
【问题描述】:

我有以下复选框列表:

<input type="checkbox" name="Categories" value="1" />
<input type="checkbox" name="Categories" value="2" />

我的模型如下:

public class MyModel
{
  public string Categories { get; set; }

}

我的控制器:

 public ActionResult Index(MyModel model)
 {
    if (ModelState.IsValid)
    {

        // Save data to database, and redirect to Success page.

        return RedirectToAction("Success");
    }

 }

同时选中两个复选框只保存一个值?

【问题讨论】:

    标签: asp.net-mvc checkboxlist


    【解决方案1】:

    你不能直接获取逗号分隔的值到服务器,我建议改变类如下

    public class MyModel
    {
       public List<string> Categories { get; set; }
    
    }
    

    你会得到复选框选中的值列表。

    如果你想要逗号分隔值,那么在客户端需要提交表单创建函数并且需要保存隐藏变量。

    希望对你有帮助

    谢谢

    【讨论】:

    • 或者string.join(",", model.Categories)
    【解决方案2】:

    主要问题是string 属性存储单个字符串,您应该使用集合属性来绑定复选框,例如List&lt;string&gt; @Ajay 之前提到过。

    因此,您应该使用以下设置:

    型号

    public class MyModel
    {
        public MyModel()
        {
            SelectedCategories = new List<string>();
    
            // put categories here
            Categories = new List<SelectListItem>() { ... };
        }
    
        // other properties
    
        public List<string> SelectedCategories { get; set; }
        public List<SelectListItem> Categories { get; set; }
    }
    

    查看

    @foreach (var item in Model.Categories)
    {
        <input type="checkbox" name="SelectedCategories" value="@item.Value" ... />
    }
    

    控制器

    [HttpPost]
    public ActionResult Index(MyModel model)
    {
        if (ModelState.IsValid)
        {
            // create comma-separated values
            var selectedCategories = string.Join(",", model.SelectedCategories);
    
            // Save data to database, and redirect to Success page.
    
            return RedirectToAction("Success");
        }
    }
    

    如果您想使用 CheckBoxFor 助手,请使用 SelectListItem ,它具有 Selected 属性和 bool 类型,因为 CheckBoxFor 绑定 bool 属性:

    型号

    public class MyModel
    {
        public MyModel()
        {
            // put categories here
            Categories = new List<SelectListItem>() { ... };
        }
    
        // other properties
        public List<SelectListItem> Categories { get; set; }
    }
    

    查看

    @for (var i = 0; i < Model.Categories.Count; i++)
    {
        @Html.CheckBoxFor(model => model.Categories[i].Selected)
        @Html.HiddenFor(model => model.Categories[i].Text)
        @Html.HiddenFor(model => model.Categories[i].Value)
    }
    

    控制器

    [HttpPost]
    public ActionResult Index(MyModel model)
    {
        if (ModelState.IsValid)
        {
            string selectedCategories = string.Join(",", 
                                        model.Categories.Where(x => x.Selected == true)
                                                        .Select(x => x.Text).ToList());
    
            // Save data to database, and redirect to Success page.
    
            return RedirectToAction("Success");
        }
    }
    

    注意:

    有一个名为 CheckBoxListFor 的自定义助手,应考虑从 List&lt;T&gt; 属性创建复选框列表。

    复选框列表实现示例可见here

    相关问题:

    Get comma-separated string from CheckboxList HTML Helper

    Get Multiple Selected checkboxes in MVC

    【讨论】:

      猜你喜欢
      • 2022-11-13
      • 2012-08-02
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多