我有以下复选框列表:
<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");
}
}
同时选中两个复选框只能保存一个值吗?
答案 0 :(得分:1)
您不能将逗号分隔的值直接发送到服务器,我建议按如下所示更改类
public class MyModel
{
public List<string> Categories { get; set; }
}
您将获得选中复选框的值列表。
如果要用逗号分隔值,则在客户端需要在提交表单创建功能时保存在隐藏变量中。
这可以帮助您
谢谢
答案 1 :(得分:0)
主要问题是string
属性存储单个字符串,您应该使用collection属性绑定复选框,例如List<string>
如@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<T>
属性创建复选框列表。
可以在here中看到复选框列表实现的示例。
相关问题: