Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使Html.CheckBoxFor返回整数_C#_Asp.net_Asp.net Mvc_Checkbox_Html.checkbox - Fatal编程技术网

C# 使Html.CheckBoxFor返回整数

C# 使Html.CheckBoxFor返回整数,c#,asp.net,asp.net-mvc,checkbox,html.checkbox,C#,Asp.net,Asp.net Mvc,Checkbox,Html.checkbox,我想在ASP.net MVC中将复选框绑定到一个整数(下面显示的ISACTIVE值) @Html.CheckBoxFor(model => model.ISACTIVE, new { htmlAttributes = new { @class = "form-control" } }) 我知道Html.CheckBoxFor只接受bool作为输入,我可以在我的模型上添加一个新属性,但我使用的是一个已经存在的数据库,每当它更新时,模型就会刷新 是否有方法为CheckBoxFor创建一个新方

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

@Html.CheckBoxFor(model => model.ISACTIVE, new { htmlAttributes = new { @class = "form-control" } })
我知道Html.CheckBoxFor只接受bool作为输入,我可以在我的模型上添加一个新属性,但我使用的是一个已经存在的数据库,每当它更新时,模型就会刷新


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

将布尔属性添加到模型中:

public bool BoolValue
{
    get { return IntValue == 1; }
    set { IntValue = value ? 1 : 0;}
}

public int IntValue { get; set; }
编辑:

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

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

如果名称与之前由MVC生成的名称匹配,则该值应返回控制器操作。也许您必须定义自己的自定义值提供程序,以便从bool转换为int,类似于:

选项1

既然不能向实体添加新属性,为什么不在操作中检查bool值呢

public ActionResult Test(bool isActive)
{

    int test = isActive ? 1 : 0;


    return View();
}   
选项2

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

模型

行动

    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);

    }
公共异步任务索引(NikolsModel模型)
{
if(ModelState.IsValid)
{
//
//创建实体的新实例
//
var记录=新NikolsEntity
{
IsValid=model.IsActive?1:0,
//模型中的其他属性
};
DbContext.NikolsEntity.add(记录);
等待DbContext.saveChangesSync();
返回操作(“索引”);
}
//出现问题,返回带有模型错误的视图
返回视图(模型);
}

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

这可能不是你想要达到的目标。不过这会给你一个想法

在你看来:

<input type="checkbox" id="yourId" name="selectedIds" value="@menu.Id"/>
希望这有帮助

@Html.CheckBoxFor(model => model.Modelname)
然后,在控制器中:

var isChecked = Request.Form["Modelname"];

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

}

使用具有布尔属性的视图模型(并且只能对布尔属性使用
CheckBoxFor()
)发送模型时,为什么不只返回布尔值…我的意思是对于除0发送True和0发送False之外的正数。@StephenMuecke我不能这样做,因为每次数据库更新时,我的模型都会恢复到原始状态。我正在寻找一种方法来更改原来的CheckBoxFor方法,或者添加一个新的类似方法来将bool输入更改为整数。@TusharGupta我想你是建议我添加一个新的helper方法来将int更改为bool?那太好了,但是我怎样才能使上面的代码行像这样工作呢?视图模型不是数据模型。每个视图都应该有一个视图模型!我已经在我的问题中解释了为什么这是不可能的。每次数据库更新时,我的模型都会还原为原始模型,因此我无法添加更多属性。这是有意义的,但
model=>model.ISACTIVE
仍会返回错误,因为ISACTIVE是int。您可以在脚本中执行吗?您是如何创建请求的,是使用表单还是使用Ajax?在我看来是使用表单。比如
@Html.LabelFor(model=>model.ISACTIVE,htmlAttributes:new{@class=“control label”})@Html.CheckBoxFor(model=>model.ISACTIVE,new{htmlAttributes=new{@class=“form control”})@Html.ValidationMessageFor(model=>model.ISACTIVE,”,new{@class=“text danger”})
这似乎是一个干净的解决方案,但我一直得到“值'true'对Active Directory无效”“当我尝试在复选框中提交表单时出错。当它被取消选中时,它工作正常。我四处寻找解决方案,但我不断得到这个错误的变化。不管怎样,我找到了它,现在它工作得很好。非常感谢。在我的视图中,我添加了
,在我的控制器上,我得到了
if(myCheckbox[0]=“1”)active=1的值伟大的工作!很乐意帮忙。谢谢
@Html.CheckBoxFor(model => model.Modelname)
var isChecked = Request.Form["Modelname"];

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

}