【问题标题】:MVC 3 ajax post not getting checkboxfor checked valuesMVC 3 ajax 帖子没有得到检查值的复选框
【发布时间】:2011-06-16 17:51:00
【问题描述】:

我已经尝试了我所知道的一切,但仍然无法让我的复选框列表选中值。我有一个嵌套的局部视图,它呈现一些客户信息数据并允许他进行一些插入。没什么复杂的。但是,有一个为某种客户生成的动态合同列表。这是我的复选框列表,动态列表。 虽然我可以获取整个表单值,但我无法从我的复选框中获取任何检查值。

这是我的代码:

视图模型

public List<TITAContratos> Contratos { get; set; }

public class TITAContratos
    {
        public string NumContrato { get; set; }
        public bool Checked { get; set; }
    }

查看

   <div style="position: static; float: left;" id="debPropContratos">
                <span>Contratos do Cliente:</span> 
                @Html.EditorFor(item => item.Contratos)

编辑器

@model MVCGestaoWeb.Models.ViewModels.TITAContratos
<p>
    @Html.HiddenFor(x => x.NumContrato)
    @Html.CheckBoxFor(x => x.Checked )
    @Html.LabelFor(x => x.Checked , Model.NumContrato)
    <br />
</p>

脚本

$("#btnCadAcordo").click(function () {
            var urlSave = '@Url.Action("DebPropostas")';
            var taVM = $("#debPropForm").serializeObject();

            $.ajax({
                type: "POST",
                url: urlSave,
                //Com isso ele permite a passagem de objetos para o Controller
                data: JSON.stringify(taVM),
                datatype: "JSON",
                contentType: "application/json; charset=utf-8",
                success: function (returndata) {
                    $("#containerDebProp").html(returndata);

                }
            });
            return true;
        });

        $.fn.serializeObject = function () {
            var o = {};
            var a = this.serializeArray();
            $.each(a, function () {
                if (o[this.name] !== undefined) {
                    if (!o[this.name].push) {
                        o[this.name] = [o[this.name]];
                    }
                    o[this.name].push(this.value || '');
                } else {
                    o[this.name] = this.value || '';
                }
            });
            return o;
        };

编辑

只是指出问题:我无法获得任何复选框选中值。即使我可以获得我的复选框隐藏值,我也无法获得选中了哪些复选框。

【问题讨论】:

  • 只是在这里确定一下-您的问题出在控制器中还是在复选框中获取值?
  • @Adam,问题出在我的控制器上。无论我做什么,我的复选框总是错误​​的,即使是我检查过的复选框。我需要知道哪些复选框被选中。

标签: c# ajax json asp.net-mvc-3 checkboxlist


【解决方案1】:

这是因为CheckBoxFor 助手为每个复选框生成了额外的隐藏字段。

如何使用.serialize() 方法而不是JSON 发送普通的application/x-www-form-urlencoded 编码请求:

$("#btnCadAcordo").click(function () {
    var urlSave = '@Url.Action("DebPropostas")';
    $.ajax({
        type: 'POST',
        url: urlSave,
        data: $('#debPropForm').serialize(),
        success: function (returndata) {
            $('#containerDebProp').html(returndata);
        }
    });
    return true;
});

这样您就不再需要serializeObject 函数。此外,debPropForm 在您显示的代码中无处可见,请确保此表单包含编辑器模板及其输入字段。

【讨论】:

  • 哇,这太棒了!我想知道你怎么知道这些事情只是看一些代码。一定是多年的经验。以及为什么 serializeObject 方法丢失了自动生成的复选框选中值?
  • @Adriano-RR,这是多年的经验 :-)
猜你喜欢
  • 1970-01-01
  • 2014-07-06
  • 1970-01-01
  • 2021-06-25
  • 2014-02-05
  • 1970-01-01
  • 1970-01-01
  • 2015-11-18
  • 2012-04-15
相关资源
最近更新 更多