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

101*_*110 6 c# checkbox asp.net-mvc model data-annotations

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

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

我被告知要按照这里所述的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; }
Run Code Online (Sandbox Code Playgroud)

//年龄阶层

[Display(Name = "Child")]
public bool child { get; set; }

[Display(Name = "Youth")]
public bool youth { get; set; }

[Display(Name = "Adult")]
public bool adult { get; set; }
Run Code Online (Sandbox Code Playgroud)

//策略类型

[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; } 
Run Code Online (Sandbox Code Playgroud)

现在接近这个我被告知使用枚举:

   public enum Age
    {
      [Display(Name="Child")
      Child,
      [Display(Name="Youth")
      Youth,
      [Display(Name="Adult")
      Adult
    }
Run Code Online (Sandbox Code Playgroud)

我还在模特中扔这个吗?

我知道这进入了模型:

[Required]
public Age MyAge { get; set; }
Run Code Online (Sandbox Code Playgroud)

在查看其他几个示例之后,我知道上面的代码是不完整的,我还需要编辑我的视图.虽然听起来很难过,但我的教育在编程方面并没有走得那么远,所以我为自己缺乏理解而道歉.

但如果你能指出我正确的方向,那么我可以走这条金色的砖路,非常感激

干杯.

ram*_*ilu 9

这是我使用Enums和CheckBoxes及其验证为您做的小型原型.

让你的ENUM成为 -

public static class Data
{
    public enum BloodGroup
    {
        [Description("A+")]
        APositive,
        [Description("B+")]
        BPositive
    } 
}
Run Code Online (Sandbox Code Playgroud)

然后构建你的Enum模型,它将保存基本的Checkbox属性 -

public class EnumModel
{
    public Data.BloodGroup BloodGroup { get; set; }
    public bool IsSelected { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后构建基于Enum模型的枚举视图模型,该模型基本上具有枚举模型列表 -

public class EnumViewModel
{
    public List<EnumModel> CheckBoxItems { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后您的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);
    }
Run Code Online (Sandbox Code Playgroud)

索引视图将显示所有复选框,并将点击提交按钮进行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"/>
}
Run Code Online (Sandbox Code Playgroud)

在提交操作中我们检查枚举视图模型的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();
    }
Run Code Online (Sandbox Code Playgroud)

输出 -

负载 -

在此输入图像描述

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

在此输入图像描述