簡體   English   中英

枚舉到模型C#MVC4中的復選框

[英]Enum to Checkboxes in the Model C# MVC4

現在我想對我的模型中的一些復選框字段進行一些驗證。

我想創建一個唯一的規則,要求每個類別中至少有一個復選框為true(或選中)以使其有效。 我在這個模型中有三個不同的類別。

我被告知要按照這里所述的枚舉來處理這個問題

我已經調查了這種情況,看起來有點過頭了,因為你基本上利用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; }

在查看其他幾個示例之后,我知道上面的代碼是不完整的,我還需要編輯我的視圖。 雖然聽起來很難過,但我的教育在編程方面並沒有走得那么遠,所以我為自己缺乏理解而道歉。

但如果你能指出我正確的方向,那么我可以走這條金色的磚路,非常感激

干杯。

這是我使用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();
    }

輸出 -

負載 -

在此輸入圖像描述

當我們沒有選擇任何內容並提交表格時 -

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM