我在.cshtml页面中有一个复选框;
@Html.CheckBox("All", new { @class = "chkBox"})
我想在我的控制器类中获取此复选框的布尔值,因为我已经尝试了
bool all = Convert.ToBoolean(collection["All"]);
其中collection
是FormCollection
类的对象
但我得到的复选框值为“all
”,我不知道如何使用formcollection对象获取已检查或未检查的值。
如果有人有任何想法,请告诉我。感谢。
答案 0 :(得分:2)
为什么不将它绑定到模型?
public class MyModel {
public bool All {get; set;}
}
在您的视图中,只需执行以下操作
@html.CheckBoxFor(m=>m.All)
应该这样做。
答案 1 :(得分:2)
你也可以通过这种方式获得:
我们假设你的控制器名称是索引
[HttpPost]
public ActionResult Index(bool All)
{
return View();
}
如果“全部”(复选框)已选中,则全部变为真。
如果“全部”(复选框)已取消选中,则全部变为假。
基于true或false您可以按照自己的方式修改代码。
注意:您在Post Controller中提到的变量必须与您在cshtml中为复选框指定的名称相同。
即;
@ Html.CheckBox(“全部”,新{@class =“chkBox”})
公共ActionResult索引(bool 全部)
答案 2 :(得分:1)
那是因为你输入标签的值为all
。在这种情况下,对于样本来说,绑定正确的类型是一个很好的实践:
public ActionResult Post(bool all)
{
//here you will get the all boolean value, if check or not as boolean
}
或者,更好的是,你可以创建一个ViewModel并绑定它,样本:
使用要在Models文件夹中使用的字段添加一个类。
public class MyViewModel
{
public string Name { get; set; }
public bool All { get; set; }
}
之后,在您的视图中,您只需键入视图并使用Html助手创建控件,以获取示例:
@model Models.MyViewModel
@using (Html.BeginForm("Post", "Home", FormMethod.Post))
{
@Html.TextBoxFor(model => model.Name)
@Html.CheckBoxFor(model => model.All)
<input type="submit" value="Send" />
}
Obs:这只是一个样本
在你的控制器中,你只得到这个模型的一个实例,让asp.net mvc为你绑定它作为对象:
public ActionResult Post(MyViewModel model)
{
// here you have the model.All as boolean value
}
这是一个很好的实践,因为ViewModels代表您在View上需要的字段,并在上下文(控制器,视图,服务,api等)之间传输它。
答案 3 :(得分:0)
您可以尝试这种方法。您可以从asp.net mvc: why is Html.CheckBox generating an additional hidden input
获取更多信息 bool all = (collections["all"] != "false");
答案 4 :(得分:0)
您需要像这样修改代码。它的工作原理:您需要先将其转换为字符串然后转换为布尔值。
Convert.ToBoolean(collection["All"].ToString());
答案 5 :(得分:0)
感谢所有人的回答,一切都有意义。但是根据上面的要求我已经修改了我的.cshtml代码,而不是使用razor语法我在我的.cshtml页面中使用它
<input id="All" name="All" value="true" type="checkbox" class="chkBox" />
现在在我的.cs页面中,我收集了布尔值,如下所示;
all = Convert.ToBoolean(collection["All"]);
所以,基本上它的作用是,如果未选中该复选框,则它将value
作为false
,否则,formcollection将考虑复选框并将赋予{{1}的值作为all
。