现在我正在寻找模型中某些复选框字段的验证。
我想创建一个唯一的规则,要求每个类别中至少有一个复选框为true(或选中)以使其有效。我在这个模型中有三个不同的类别。
我被告知要按照here所述的enum来处理这个问题。
我已经调查过这种情况,看起来有点过头了,因为你基本上利用C#来定制你自己的规则。
现在这些是上面超链接中提到的类别:
//残疾
[Display(Name = "Learning Disabilities")]
public bool LD { get; set; }
[Display(Name = "Developmental Disabilities")]
public bool DD { get; set; }
[Display(Name = "AD/HD")]
public bool ADHD { get; set; }
[Display(Name = "Autism")]
public bool Autism { get; set; }
//年龄组
[Display(Name = "Child")]
public bool child { get; set; }
[Display(Name = "Youth")]
public bool youth { get; set; }
[Display(Name = "Adult")]
public bool adult { get; set; }
//策略类型
[Display(Name = "Academic")]
public bool academic { get; set; }
[Display(Name = "Behaviour")]
public bool behaviour { get; set; }
[Display(Name = "Communication")]
public bool communication { get; set; }
[Display(Name = "Social")]
public bool social { get; set; }
现在接近这个我被告知要使用枚举:
public enum Age
{
[Display(Name="Child")
Child,
[Display(Name="Youth")
Youth,
[Display(Name="Adult")
Adult
}
^我还在模型中抛出这个吗?
我知道这会进入模型:
[Required]
public Age MyAge { get; set; }
在查看其他几个示例后,我知道上面的代码不完整,我还需要编辑我的视图。虽然听起来很难过,但我的教育在编程方面并没有走得那么远,所以我为我缺乏理解而道歉。
但是,如果你能指出我正确的方向,那么我可以走这条金色的砖路,非常感激
干杯。
答案 0 :(得分:7)
以下是我使用Enums和CheckBoxes及其验证为您做的小型原型。
让你的ENUM成为 -
public static class Data
{
public enum BloodGroup
{
[Description("A+")]
APositive,
[Description("B+")]
BPositive
}
}
然后构建您的Enum模型,它将保存基本的Checkbox属性 -
public class EnumModel
{
public Data.BloodGroup BloodGroup { get; set; }
public bool IsSelected { get; set; }
}
然后构建基于Enum模型的枚举视图模型,其基本上具有枚举模型列表 -
public class EnumViewModel
{
public List<EnumModel> CheckBoxItems { get; set; }
}
然后您的Controller Index Action将构建EnumViewModel并将其绑定到Index View -
public ActionResult Index()
{
EnumViewModel model = new EnumViewModel();
model.CheckBoxItems = new List<EnumModel>();
model.CheckBoxItems.Add(new EnumModel() { BloodGroup = Data.BloodGroup.APositive, IsSelected = false });
model.CheckBoxItems.Add(new EnumModel() { BloodGroup = Data.BloodGroup.BPositive, IsSelected = false });
return View(model);
}
索引视图将显示所有复选框,并将在点击提交按钮 -
时进行POST提交操作@model MVC.Controllers.EnumViewModel
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
@Html.ValidationSummary();
@using (Html.BeginForm("Submit", "Enum", FormMethod.Post))
{
for (int i = 0; i < Model.CheckBoxItems.Count; i++)
{
@Html.LabelFor(m => m.CheckBoxItems[i].BloodGroup);
@Html.CheckBoxFor(m => m.CheckBoxItems[i].IsSelected);
@Html.HiddenFor(m => m.CheckBoxItems[i].BloodGroup);
}
<input type="submit" value="click"/>
}
在提交操作中我们检查枚举视图模型的IsSelected属性,如果没有,则我们将错误返回到索引视图。
public ActionResult Submit(EnumViewModel model)
{
if (!model.CheckBoxItems.Where(p => p.IsSelected).Any())
{
ModelState.AddModelError("CheckBoxList", "Please select atleast one!!!");
return View("Index",model);
}
return View();
}
输出 -
载入 -
当我们没有选择任何内容并提交表格时