使用jquery管理复选框并在控制器中发送这些值

时间:2015-05-20 08:15:44

标签: javascript jquery asp.net-mvc

在razor视图中我有两个checbox属性。它们是相互排斥的。当选择一个时,其他不是,反之亦然。

@Html.EditorFor(model => model.Before)
@Html.EditorFor(model => model.Start)

在dom准备好的同一视图中我管理复选框单击

$('#Before').change(function () {
     if ($(this).is(":checked")) {
        $('#Start').attr('checked', false);
        return;
     }   
     $('#Start').attr('checked', true);
});

$('#Start').change(function () {
    if ($(this).is(":checked")) {
        $('#Before').attr('checked', false);
        return;
    }
    $('#Before').attr('checked', true);
});

此外我正在创建js对象,该对象将被字符串化并发送到mvc控制器

var myObj= {            
      Before: $("#Before").is(':checked'),
      Start: $("#Start").is(':checked')      
};

 alert("Is before checked: "+$("#Before").is(':checked'));
 alert("Is start checked: "+$("#Start").is(':checked'));
/* This returns always selected (correct) value  */

$.ajax({
          type: 'POST',
          traditional: true,
          contentType: 'application/json',
          url: '/Home/Manage',
          data: JSON.stringify({ model: myObj}),              
          success: function (data) { }
          },error: function () {
              alert('error');
          }
});

我有一个viewmodel,代表这个发送到控制器的myObj

public class MyViewModel
{
   public bool Start { get; set; }
   public bool Before{ get; set; }
}
[HttpPost]
public ActionResult Manage(MyViewModel model)
{ 
}

问题如下:

当选中Start时,我得到Start as checked和Before as non checked,但是当选中Before并且Start不是两者都在model中的控制器内接收为false时。

1 个答案:

答案 0 :(得分:1)

尝试使用.prop('checked', true);代替.attr('checked', true);