使 Html.CheckBoxFor return 成为整数
Make Html.CheckBoxFor return an integer
我想在 ASP.net MVC 中将一个复选框绑定到一个整数(如下所示的 ISACTIVE 值)。
@Html.CheckBoxFor(model => model.ISACTIVE, new { htmlAttributes = new { @class = "form-control" } })
我知道 Html.CheckBoxFor 只接受 bool 作为输入,我可以在我的模型上添加一个新的 属性,但我使用的是一个已经存在的数据库,每次它更新时,模型得到刷新。
有没有办法为 CheckBoxFor 创建一个新方法,它将 return 一个基于复选框是否被选中的整数?
将 bool 属性 添加到您的模型中:
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:How to map a 1 or 0 in an ASP.Net MVC route segment into a Boolean action method input parameter
选项 1
既然你不能向你的实体添加新的 属性 为什么不检查你的操作中的 bool 值?
public ActionResult Test(bool isActive)
{
int test = isActive ? 1 : 0;
return View();
}
选项 2
创建您自己的视图模型来检查布尔值,然后创建一个新的实体记录。
型号
public class NikolsModel
{
[Required]
public bool IsActive { get; set; }
// Other Properties...
}
动作
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);
}
您也可以尝试对复选框类型使用简单的 HTML input
控件。这样,您可以为它分配一些值或名称,并将它 return 也分配给控制器。
这可能不是您想要实现的目标。它会给你一个想法。
在您看来:
<input type="checkbox" id="yourId" name="selectedIds" value="@menu.Id"/>
在您的控制器中,您可以尝试像这样访问此特定控件的值:
value = Request.Form["selectedIds"];
希望对您有所帮助。
@Html.CheckBoxFor(model => model.Modelname)
然后,在您的控制器中:
var isChecked = Request.Form["Modelname"];
if(!isChecked.Equals("false"))
{
//Checkbox is checked, do whatever you want!
}
我想在 ASP.net MVC 中将一个复选框绑定到一个整数(如下所示的 ISACTIVE 值)。
@Html.CheckBoxFor(model => model.ISACTIVE, new { htmlAttributes = new { @class = "form-control" } })
我知道 Html.CheckBoxFor 只接受 bool 作为输入,我可以在我的模型上添加一个新的 属性,但我使用的是一个已经存在的数据库,每次它更新时,模型得到刷新。
有没有办法为 CheckBoxFor 创建一个新方法,它将 return 一个基于复选框是否被选中的整数?
将 bool 属性 添加到您的模型中:
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:How to map a 1 or 0 in an ASP.Net MVC route segment into a Boolean action method input parameter
选项 1
既然你不能向你的实体添加新的 属性 为什么不检查你的操作中的 bool 值?
public ActionResult Test(bool isActive)
{
int test = isActive ? 1 : 0;
return View();
}
选项 2
创建您自己的视图模型来检查布尔值,然后创建一个新的实体记录。
型号
public class NikolsModel
{
[Required]
public bool IsActive { get; set; }
// Other Properties...
}
动作
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);
}
您也可以尝试对复选框类型使用简单的 HTML input
控件。这样,您可以为它分配一些值或名称,并将它 return 也分配给控制器。
这可能不是您想要实现的目标。它会给你一个想法。
在您看来:
<input type="checkbox" id="yourId" name="selectedIds" value="@menu.Id"/>
在您的控制器中,您可以尝试像这样访问此特定控件的值:
value = Request.Form["selectedIds"];
希望对您有所帮助。
@Html.CheckBoxFor(model => model.Modelname)
然后,在您的控制器中:
var isChecked = Request.Form["Modelname"];
if(!isChecked.Equals("false"))
{
//Checkbox is checked, do whatever you want!
}