2011-06-16 57 views
2

我已經試過了解我所知道的所有信息,但仍然無法獲得我的checkboxlist檢查值。我有一個嵌套的局部視圖,呈現一些客戶端信息數據,並允許他做一些插入。沒什麼複雜。但是,有一些爲某類客戶生成的動態合同列表。這是我的checkboxlist,動態列表。 儘管我可以獲取整個表單值,但我無法從我的複選框中獲取任何檢查值。MVC 3 ajax發佈沒有獲得檢查值的複選框

Here's我的代碼:

視圖模型

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

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

VIEW

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

EDITOR

@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; 
     }; 

編輯

只是點了問題:我不能得到任何選中複選框值。即使我可以讓我的複選框隱藏價值,我無法得到哪些複選框被檢查。

+0

只是在這裏肯定 - 你的問題是在你的控制器或獲取您的複選框的價值? – 2011-06-17 01:03:05

+0

@Adam,問題出在我的控制器上。不管我做什麼,我的複選框總是假的,即使是我檢查過的。我需要知道檢查了哪些複選框。 – AdrianoRR 2011-06-17 11:58:47

回答

2

這是由於CheckBoxFor幫助程序爲每個複選框生成的附加隱藏字段。

如何使用.serialize()方法發送正常application/x-www-form-urlencoded編碼的請求,而不是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無法在您顯示的代碼中看到,請確保此表單包裝編輯器模板及其輸入字段。

+0

Woow,這太棒了!我不知道你怎麼知道這些東西只是看一些代碼。必須是多年的經驗。爲什麼serializeObject方法失去了自動生成的複選框選中的值? – AdrianoRR 2011-06-17 12:59:21

+0

@ Adriano-RR,這是多年的經驗:-) – 2011-06-17 12:59:41