Сообщение ajax MVC 3 не получает флажок для проверенных значений - PullRequest
2 голосов
/ 16 июня 2011

Я уже попробовал все, что знаю, но все еще не могу получить проверенные значения в моем чекбоксе. У меня есть вложенное частичное представление, которое отображает некоторые данные о клиенте и позволяет ему выполнить некоторую вставку. Ничего сложного. Тем не менее, существует динамический список контрактов, который создается для некоторых клиентов. Это мой чекбокс, динамический список. Хотя я могу получить полные значения формы, я не могу получить какие-либо контрольные значения из своих флажков.

Вот мой код:

ViewModel

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>

SCRIPT

$("#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;
        };

EDIT

Просто чтобы указать на проблему: я не могу получить ни одного флажка, отмеченного значением. Даже при том, что я могу получить скрытые значения своих флажков, я не могу получить, какие флажки были отмечены.

1 Ответ

2 голосов
/ 17 июня 2011

Это связано с дополнительным скрытым полем, созданным для каждого флажка помощником CheckBoxFor.

Как насчет отправки обычного application/x-www-form-urlencoded закодированного запроса с использованием метода .serialize() вместо JSON:

$("#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 нигде не видно в показанном вами коде, убедитесь, что эта форма охватывает шаблон редактора и его поля ввода.

...