为大型模型设置/绑定HtmlHelper.CheckBoxFor的更快/更轻松/高效的方法

时间:2019-02-19 09:38:59

标签: c#

基本上,我有一个类,其中包含许多我想绑定到View的属性。当时打字很痛苦而且很难维护,所以想知道是否有更简便的方法。

当前型号:

public class test
{
    public bool a { get; set; } 
    public bool b { get; set; } 
    public bool c { get; set; } 
    .
    .
    .
    public bool x { get; set; } 
    public bool y { get; set; } 
    public bool z { get; set; } 

}

当前控制器:

public ActionResult checkbox()
{
    var viewModel = new test();
    return View(viewModel);

}

当前视图:

@model Test.Program.test

@Html.CheckBoxFor(m => m.a)
@Html.LabelFor(m => m.a)

@Html.CheckBoxFor(m => m.b)
@Html.LabelFor(m => m.b)

@Html.CheckBoxFor(m => m.c)
@Html.LabelFor(m => m.c)
.
.
.
@Html.CheckBoxFor(m => m.x)
@Html.LabelFor(m => m.x)

@Html.CheckBoxFor(m => m.y)
@Html.LabelFor(m => m.y)

@Html.CheckBoxFor(m => m.z)
@Html.LabelFor(m => m.z)

“观看”部分是令我恐惧的部分。

编辑: 变量名仅作为示例。

Edit2: 最终,我根据Soufiane Tahiri的答案提出了一些愚蠢的骇客方法。

@foreach (var prop in test.GetType().GetProperties())
    {
        //here by adding the model in front will cause the model to bind with the response
        @Html.CheckBox("test." + prop.Name)
        @Html.Label(prop.Name)
    }

1 个答案:

答案 0 :(得分:3)

您可以使用反射并遍历模型属性:

    @foreach (PropertyInfo prop in Model.GetType().GetProperties())
    {
     @Html.CheckBox(prop.Name)
     @Html.Label(prop.Name)
    }

有效的代码段:https://dotnetfiddle.net/4hiOZr