在Ajax中捕获复选框值

时间:2015-04-08 15:27:51

标签: javascript jquery ajax asp.net-mvc-5

我在局部视图中有一个复选框

<div>Full time:  @Html.CheckBoxFor(model => model.FullTime, new { htmlAttributes = new { id = "txtIsFullTime" } })</div>

在同一局部视图中我有这个Ajax代码:

<script>
var urlAction = "@Url.Content("~/Treeview/_NewEmpThird")"; 
function AjaxGoodRedirect(urlAction) {           
    console.log(urlAction);
    $.ajax({
        type: "POST",
        url: urlAction,
        data: JSON.stringify({ FullTime: $("#txtIsFullTime").val() }),  //data: JSON.stringify({ ID: 1, Forename: "FName", Surname: "SName" }),
        datatype: "JSON",
        contentType: "application/json; charset=utf-8",
        success: function (returndata) {
            if (returndata.ok)
                $("#detailView").load(returndata.newurl);
            else
                window.alert(returndata.message);
        }
    }

    );
}

但它每次都会传回一个假值。

我对@ Html.EditorFor使用了相同的方法并且没有任何问题 - 任何人都可以帮助指出我哪里出错了吗?

谢谢:)

修改

认为问题是新的html attributes = new ..删除了(并纠正了错字)

div&gt;全职:@ Html.CheckBoxFor(model =&gt; model.FullTime,new {id =&#34; txtFullTime&#34;})

然后使用

数据:JSON.stringify({ID:$(&#34; #txtFullTime&#34;)。是(&#39;:已检查&#39;)?1:0})

并且不返回1或0。

2 个答案:

答案 0 :(得分:0)

这是我在我构建的表单映射器中使用的内容:

switch (field.prop('type')) {
    case 'checkbox':
        newVal = this.checked;
        break;
    default:
        newVal = field.val();
        break;
}

因此,您可能需要将$("#txtIsFullTime").val()更改为$("#txtIsFullTime").get(0).checked$("#txtIsFullTime").is(':checked')

<强>更新

我认为值10是因为Html.CheckBoxFor()生成2个输入。一个用于值(0 | 1),一个用于状态(true | false)。这是对MVC级别的要求。

More info

答案 1 :(得分:0)

我的猜测:

id = "txtIsFullTime"
$("#textIsFullTime")

ID不匹配