检查是否在没有提交按钮的情况下在MVC 4中选中了复选框

时间:2014-04-22 08:41:51

标签: c# asp.net-mvc-4

我有一个复选框:

<form action="" method="POST">
    <label>
        Archived
        @Html.CheckBox("checkedArchive")
    </label>
</form>

当它被选中时,我希望它调用ContentResult,它有许多方法,并附加一个新值来检查它是否被选中/取消选中:

public ContentResult Data(int? id)

到目前为止,我有:

[HttpPost]
public ActionResult Index(FormCollection formData)
{
    bool checked;

    //Check if value is selected and set bool to true or false

    return RedirectToAction("Data", new {checked});
}

但我无法做任何检查和通过。必须有一个更简单的方法。

4 个答案:

答案 0 :(得分:1)

bool checked = Request.Form.AllKeys.Where(c =&gt; c.Contains(“checkedArchive”))。FirstOrDefault()!= null;

由于只会检出已检查的值,因此您无需验证是否已对其进行检查。

答案 1 :(得分:0)

我通过以下方式检查通用复选框:

bool checked = Request.Form["checkedArchive"] != "false";

答案 2 :(得分:0)

如果可以像这样更改索引的签名:

[HttpPost]
public ActionResult Index(FormCollection formData, bool? checkedArchive)
{
    bool checked;
    if(!checkedArchive.HasValue) 
        checked = false;
    else
        checked = checkedArchive.Value;

    //Check if value is selected and set bool to true or false

    return RedirectToAction("Data", new {checked});
}

我希望它会有所帮助。请注意,如果您有submit button,此解决方案将起作用。您想要实现的目标我认为您需要使用Jquery Ajax function attached to the event change of your复选框并在控制器中调用相应的操作。

更新

首先,您需要在视图中引用JQuery lib,然后将此脚本放在头部中

 $(document).ready(function() { 
   $("#HcheckedArchiven").click(function(){
     $.ajax({

        url: '@Url.Action("actionmethod", "controllername")',
        type: "POST",
        data: //data,
        dataType: //type of response,
        success: function (data) {
          //your code here
         }
   error: function(data){

       }
   });});
 })

另外,如果你想在不点击的情况下调用ajax,但只有在检查了值的情况下,你必须在click事件中使用if条件来检查相同的使用$(this).is(:checked)

答案 3 :(得分:0)

如果不提交表单,您可以发出ajax请求并将复选框的值作为参数发送。
将此值发送到控制器后,您可以确定参数中的值,并根据值调用所需的方法。