枚举到模型C#MVC4中的复选框

枚举到模型C#MVC4中的复选框,c#,asp.net-mvc,checkbox,model,data-annotations,C#,Asp.net Mvc,Checkbox,Model,Data Annotations,现在我想对模型中的一些复选框字段进行一些验证 我想创建一个唯一的规则,要求每个类别中至少有一个复选框为true(或checked)才能使其有效。我在这个模型中有三个不同的类别 我被告知要用enum来处理这个问题 我已经调查过这种情况,这似乎有点让我不知所措,因为你基本上是利用C来定制你自己的规则的 下面是上面超链接中提到的类别: //残疾 [Display(Name = "Learning Disabilities")] public bool LD { get; set; } [Displa

现在我想对模型中的一些复选框字段进行一些验证

我想创建一个唯一的规则,要求每个类别中至少有一个复选框为true(或checked)才能使其有效。我在这个模型中有三个不同的类别

我被告知要用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; } 
现在,为了解决这个问题,我被告知使用enum:

   public enum Age
    {
      [Display(Name="Child")
      Child,
      [Display(Name="Youth")
      Youth,
      [Display(Name="Adult")
      Adult
    }
^我还在模型里扔这个吗

我知道这是模型的一部分:

[Required]
public Age MyAge { get; set; }
在看了其他几个例子之后,我知道上面的代码是不完整的,我还必须编辑我的视图。虽然听起来很悲哀,但我的教育在编程方面还没有走到这一步,所以我为我的理解力不足道歉

但是如果你能给我指出正确的方向,这样我就可以走这条金砖路,我将不胜感激


干杯。

这是我为您制作的带有枚举和复选框及其验证的小型原型

让您的枚举为-

public static class Data
{
    public enum BloodGroup
    {
        [Description("A+")]
        APositive,
        [Description("B+")]
        BPositive
    } 
}
然后构造枚举模型,该模型将包含基本复选框属性-

public class EnumModel
{
    public Data.BloodGroup BloodGroup { get; set; }
    public bool IsSelected { get; set; }
}
然后在枚举模型的基础上构造枚举视图模型,基本上有枚举模型列表-

public class EnumViewModel
{
    public List<EnumModel> CheckBoxItems { get; set; }
}
输出-

装载时-

如果我们没有选择任何内容并提交表格-


人们应该如何知道他们选择的是什么血型?似乎无法让它实际打印出血型组的名称。@strvanica而不是-
@Html.LabelFor(m=>m.CheckBoxItems[i].bloodgroup)使用-
@Html.DisplayFor(m=>m.CheckBoxItems[i].BloodGroup)。然后你会得到特定的血型。
    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);
    }
@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"/>
}
    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();
    }