33

我想通过我的操作方法测试复选框是否被选中。我需要将复选框值从视图传递到控制器。

这是我的看法:

@using (Html.BeginForm("Index", "Graphe"))
{
    <table style="width: 100%;" border="1">
        <tbody>
            <tr>
                <td>Responsable:</td>
                <td>
                    <select id="Responsables" name="responsables">
                        <option>Selectionnez --</option>
                    </select>
                </td>
                <td><input id="responsable" name="checkResp" type="checkbox" /></td>
            </tr>
            <tr> 
                <td><input type="submit" value="Afficher" id="ButtonSubmit"/></td>
                <td><input class="button" id="ButtonReset" type="button" value="Annuler"  /></td>
            </tr>
        </tbody>
    </table>
}

我试试这个:

public ActionResult Index(string responsables, bool checkResp)
{
    Highcharts chart = new Highcharts("chart");

    if (responsables != null)
    {          
        if (checkResp)
            chart = Global();
        else
            chart = Resp(responsables);
    }
    else
        chart = Global();
    return View(chart);
}

但我收到此错误:

Le dictionnaire de paramètres contient une entrée Null pour le paramètre « checkAct » de type non Nullable « System.Boolean » pour lamethode « System.Web.Mvc.ActionResult Index(System.String, System.String, Boolean) » dans « Project .Controllers.GrapheController ». Un paramètre facultatif doit être un type référence, un type Nullable ou être déclaré en tant que paramètre facultatif。Nom du paramètre : 参数

翻译:

参数字典为“项目中的方法“System.Web.Mvc.ActionResult Index (System.String, System.String, Boolean)”的不可空类型“System.Boolean”的“checkAct”参数包含一个空条目.Controllers.GrapheController"。可选参数必须是引用类型、Nullable 类型或声明为可选参数。参数名称:parameters

4

12 回答 12

74

如果选中复选框,则回发值将包含表单的键值对[InputName]=[InputValue]

如果未选中复选框,则发布的表单根本不包含对该复选框的引用。

知道了这一点,以下将起作用:

在标记代码中:

<input id="responsable" name="checkResp" value="true" type="checkbox" />

以及您的操作方法签名:

public ActionResult Index(string responsables, bool checkResp = false)
{
    //Do Something
}

这将起作用,因为当复选框被选中时,回发将包含checkResp=true,如果未选中复选框,则参数将默认为 false。

于 2013-09-18T03:27:18.027 回答
19

出于某种原因,使用 Mvc 5 手动创建复选框的 Andrew 方法对我不起作用。相反,我使用了这个

@Html.CheckBox("checkResp")

创建一个与控制器配合得很好的复选框。

于 2014-12-10T13:11:47.607 回答
12

尝试使用表单集合

<input id="responsable" value="True" name="checkResp" type="checkbox" /> 

[HttpPost]
public ActionResult Index(FormCollection collection)
{
     if(!string.IsNullOrEmpty(collection["checkResp"])
     {
        string checkResp=collection["checkResp"];
        bool checkRespB=Convert.ToBoolean(checkResp);
     }

}
于 2013-09-18T02:16:35.723 回答
5

以前的解决方案都不适合我。最后我发现动作应该编码为:

public ActionResult Index(string MyCheck = null)

然后,当检查时传递的值是“on”,而不是“true”。否则,它始终为空。

希望它可以帮助某人!

于 2016-02-12T20:24:40.197 回答
4

如果您希望在提交表单时让 MVT 控制器读取您的值,并且您不希望处理隐藏的输入。您可以做的是value向您添加属性checkbox并将其设置为trueor false

MVT 不会myCheckbox在此处将 viewModel 属性识别为 true

<input type="checkbox" name="myCheckbox" checked="checked" />

但如果你添加

<input type="checkbox" name="myCheckbox" checked="checked" value="true" />

执行此操作的脚本:

$(document).on("click", "[type='checkbox']", function(e) {
        if (this.checked) {
            $(this).attr("value", "true");
        } else {
            $(this).attr("value","false");}
    });
于 2015-09-23T15:40:06.477 回答
2

在复选框中设置值,如下所示:

<input id="responsable" name="checkResp" value="true" type="checkbox" />

在您的模型中将 checkResp 更改为可为空的属性,如下所示:

public Nullable<bool> checkResp{ get; set; }

利用 ?在 checkResp 之前像:

public ActionResult Index( string responsables, bool ? checkResp)
{
 ......
}
于 2018-08-05T13:28:47.057 回答
1

你应该强烈地输入你的观点。然后你可以这样做:

public class YourViewModel {
    public bool ConditionaValue { get; set; }
}

在您看来,您可以创建一个将绑定到此布尔值的复选框:

@Html.CheckBoxFor(x => x.ConditionalValue)

如果选中,模型属性将为真。

但是对于您的直接问题..您需要将您的复选框命名为与您的操作方法参数相同的名称..它们应该是bool..

于 2013-09-18T02:02:34.533 回答
0

对于 MVC 控制器方法,使用可为空的布尔类型:

public ActionResult Index(string responsables, bool? checkResp) { etc. }

然后,如果选中该复选框,则 checkResp 将为真。如果不是,它将为空。

于 2015-12-01T18:55:37.940 回答
0

我希望这会有所帮助。

为您的视图创建一个视图模型。这将代表复选框的真或假(选中或未选中)值。

public class UsersViewModel
{
    public bool IsAdmin { get; set; }
    public bool ManageFiles { get; set; }
    public bool ManageNews { get; set; }
}

接下来,创建您的控制器并将视图模型传递给您的视图。

public IActionResult Users()
{
     var viewModel = new UsersViewModel();
     return View(viewModel);
}

最后,创建您的视图并引用您的视图模型。使用 @Html.CheckBoxFor(x => x) 显示复选框并保存它们的值。

@model Website.Models.UsersViewModel
<div class="form-check">
    @Html.CheckBoxFor(x => x.IsAdmin)
    <label class="form-check-label" for="defaultCheck1">
           Admin
    </label>
</div>
          

当您从视图发布/保存数据时,视图模型将包含复选框的值。确保将视图模型作为参数包含在调用以保存数据的方法/控制器中。

我希望这是有道理的并有所帮助。这是我的第一个答案,如果缺乏,请见谅。

于 2020-04-23T16:40:52.153 回答
0
<form action="Save" method="post">
 IsActive <input type="checkbox" id="IsActive" checked="checked" value="true" name="IsActive"  />

 </form>

 public ActionResult Save(Director director)
        {
                   // IsValid is my Director prop same name give    
            if(ModelState.IsValid)
            {
                DirectorVM ODirectorVM = new DirectorVM();
                ODirectorVM.SaveData(director);
                return RedirectToAction("Display");
            }
            return RedirectToAction("Add");
        }
于 2016-03-24T05:52:36.460 回答
0

大多数解决方案确实存在问题,因为我试图使用具有特定样式的复选框。我需要复选框的值来将它们发送到列表中,一旦收集到值,就需要保存它。一段时间后,我确实设法解决了这个问题。

希望它可以帮助某人。下面是代码:

控制器:

    [HttpGet]
    public ActionResult Index(List<Model> ItemsModelList)
    {

        ItemsModelList = new List<Model>()
        {                
            //example two values
            //checkbox 1
            new Model{ CheckBoxValue = true},
            //checkbox 2
            new Model{ CheckBoxValue = false}

        };

        return View(new ModelLists
        {
            List = ItemsModelList

        });


    }

    [HttpPost]
    public ActionResult Index(ModelLists ModelLists)
    {
        //Use a break point here to watch values
        //Code... (save for example)
        return RedirectToAction("Index", "Home");

    }

型号 1:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;

    namespace waCheckBoxWithModel.Models
    {
        public class Model
{

    public bool CheckBoxValue { get; set; }

}
    }

型号 2:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;

    namespace waCheckBoxWithModel.Models
    {
        public class ModelLists
{

    public List<Model> List { get; set; }

}
    }

查看(索引):

    @{
ViewBag.Title = "Index";

@model waCheckBoxWithModel.Models.ModelLists
    }
    <style>

.checkBox {
    display: block;
    position: relative;
    margin-bottom: 12px;
    cursor: pointer;
    font-size: 22px;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}

    /* hide default checkbox*/
    .checkBox input {
        position: absolute;
        opacity: 0;
        cursor: pointer;
    }

/* checkmark */
.checkmark {
    position: absolute;
    top: 0;
    left: 0;
    height: 25px;
    width: 25px;
    background: #fff;
    border-radius: 4px;
    border-width: 1px;
    box-shadow: inset 0px 0px 10px #ccc;
}

/* On mouse-over change backgroundcolor */
.checkBox:hover input ~ .checkmark {
    /*background-color: #ccc;*/
}

/* background effect */
.checkBox input:checked ~ .checkmark {
    background-color: #fff;
}

/* checkmark (hide when not checked) */
.checkmark:after {
    content: "";
    position: absolute;
    display: none;
}

/* show checkmark (checked) */
.checkBox input:checked ~ .checkmark:after {
    display: block;
}

/* Style checkmark */
.checkBox .checkmark:after {
    left: 9px;
    top: 7px;
    width: 5px;
    height: 10px;
    border: solid #1F4788;
    border-width: 0 2px 2px 0;
    -webkit-transform: rotate(45deg);
    -ms-transform: rotate(45deg);
    transform: rotate(45deg);
}
   </style>

    @using (Html.BeginForm())
    {

    <div>

@{
    int cnt = Model.List.Count;
    int i = 0;

}

@foreach (var item in Model.List)
{

    {
        if (cnt >= 1)
        { cnt--; }
    }

    @Html.Label("Example" + " " + (i + 1))

    <br />

    <label class="checkBox">
        @Html.CheckBoxFor(m => Model.List[i].CheckBoxValue)
        <span class="checkmark"></span>
    </label>

    { i++;}

    <br />

}

<br />
<input type="submit" value="Go to Post Index" />    

    </div>

    }
于 2018-09-28T15:24:44.607 回答
0
 public ActionResult Save(Director director)
        {
          // IsActive my model property same name give in cshtml
//IsActive <input type="checkbox" id="IsActive" checked="checked" value="true" name="IsActive" 
            if(ModelState.IsValid)
            {
                DirectorVM ODirectorVM = new DirectorVM();
                ODirectorVM.SaveData(director);
                return RedirectToAction("Display");
            }
            return RedirectToAction("Add");
        }
于 2016-03-24T06:01:09.980 回答