关于c#:使Html.CheckBoxFor返回一个整数

Make Html.CheckBoxFor return an integer

我想将一个复选框绑定到ASP.net MVC中的一个整数(如下所示的ISACTIVE值)。

1
@Html.CheckBoxFor(model => model.ISACTIVE, new { htmlAttributes = new { @class ="form-control" } })

我知道Html.CheckBoxFor仅接受bool作为输入,并且可以在模型上添加新属性,但是我使用的是已经存在的数据库,并且每次更新时,都会刷新模型。

是否有一种为CheckBoxFor创建新方法的方法,该方法将根据是否选中该框来返回整数?


1
@Html.CheckBoxFor(model => model.Modelname)

,然后在您的控制器中:

1
2
3
4
5
6
7
var isChecked = Request.Form["Modelname"];

if(!isChecked.Equals("false"))
{
//Checkbox is checked, do whatever you want!

}

您也可以尝试将简单的HTML input控件用于复选框类型。这样,您可以为其分配一些值或名称,并将其也返回给控制器。

这可能与您要实现的目标不完全相同。它会给你一个想法。

您认为:

1
<input type="checkbox" id="yourId" name="selectedIds" value="@menu.Id"/>

在您的控制器中,您可以尝试访问此特定控件的值,如下所示:

1
value = Request.Form["selectedIds"];

希望这会有所帮助。


选项1

由于您无法向实体添加新属性,为什么不检查动作中的布尔值?

1
2
3
4
5
6
7
8
public ActionResult Test(bool isActive)
{

    int test = isActive ? 1 : 0;


    return View();
}

选项2

创建您自己的视图模型,该模型检查布尔值,然后创建新的实体记录。

型号

1
2
3
4
5
6
7
8
9
public class NikolsModel
{

    [Required]
    public bool IsActive { get; set; }

    // Other Properties...

}

动作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    public async Task<ActionResult> Index(NikolsModel model)
    {

        if (ModelState.IsValid)
        {
            //
            // Create a new instance of your entity
            //
            var record = new NikolsEntity
            {
                IsValid = model.IsActive ? 1 : 0,
                //Other properties from model
            };

            DbContext.NikolsEntity.add(record);

            await DbContext.SaveChangesAsync();

            return RedirectToAction("Index");
        }


        //Something went wrong, return the view with model errors
        return View(model);

    }


为模型添加布尔属性:

1
2
3
4
5
6
7
public bool BoolValue
{
    get { return IntValue == 1; }
    set { IntValue = value ? 1 : 0;}
}

public int IntValue { get; set; }

编辑:

您也可以手动创建复选框控件:

1
@Html.CheckBox("IsActive", Model.IsActive ?  true : false,  new { htmlAttributes = new { @class ="form-control" } })

如果名称与MVC先前生成的名称匹配,则该值应返回到控制器操作。也许您必须定义自己的自定义值提供程序,才能将bool转换为int,类似于:如何将ASP.Net MVC路由段中的1或0映射到布尔操作方法输入参数