2011-12-08 66 views
4

我正在尋找一種方法來將給定類的所有現有複選框的值存儲到某種列表或數組中,並通過jquery將結果發送給asp.net mvc控制器。複選框不必檢查,我需要所有這些。用jquery創建一個列表並將其發佈到asp.net mvc

更多細節:

我的複選框看起來像這樣

<input type="checkbox" value="1" class="a-checkbox" 
<input type="checkbox" value="2" class="a-checkbox" 
<input type="checkbox" value="3" class="a-checkbox" 

這將是很好,如果我的MVC控制器可能看起來像這樣

public JsonResult SaveList(List<String> values) { //... } 

我知道我可以訪問該複選框用以下方式

$('input.a-checkbox').each(
    function() { 
     // create the list with the help of $(this).val() 
    } 
); 

// jquery post would happen here 

但我不知道如何創建這樣的數據結構。你可以幫幫我嗎?

謝謝

編輯:好的,謝謝。你能告訴我這有什麼問題嗎?我的控制器被確實叫,但列表爲空(服務器端)

var list = []; 
      $('a-checkbox').each(
       function() { 
        list.push($(this).val()); 
       } 
      ); 

      $.ajax({ 
       type: "POST", 
       url: myUrl, 
       data: list, 
       success: function (data) { 
        alert(data.Result); 
       }, 
       dataType: "json", 
       traditional: true 
      }); 
+0

如果值是零它意味着你有一個模型綁定錯誤。下面是一個擴展方法,我用它來將debug錯誤轉儲到調試中的控制檯:http://pastebin.com/S0gM3vqg – asawyer

回答

3

這將會把所有的checkbox值(value屬性)爲Array

var values = []; 
$(".a-checkbox").each(function() { 
    values.push($(this).val()); 
}); 

// values now equals ["1", "2", "3"] 
+0

感謝大家,也許你可以看看上面的m編輯?對帖子有問題 – alapeno

+0

jQuery會使用[param](http://api.jquery.com/jQuery.param/)將您的'list'串連起來。有一個例子說明如何在鏈接頁面上序列化數組。 – jabclab

1

試試這個

var list = []; 
$('input.a-checkbox').each(
    function() { 
     // create the list with the help of $(this).val() 
     list.push($(this).val()); 
    } 
); 

現在您可以將list對象發佈到您的mvc控制器操作。

1

我使用.Serialize()來格式化我的mvc ajax動作的表單數據。

var checkPostData = $(".a-checkbox").serialize(); 

http://api.jquery.com/serialize/

+0

這會產生一個查詢字符串(例如'a = 1&b = 2&c = 3&d = 4&e = 5'),而不是數組。 –

+0

那麼他確實說過「這將是很好的......」而不是「它是必需的」:P mvc模型活頁夾通常很好地處理細節。儘管你的權利可能不是OP的內容。 – asawyer

0

我在我的MVC模式,都是一樣的問題空值。我發現使用$(「input:checked」)作爲我的數據,而不是嘗試將值提取到js中的數組,並且我通過給出複選框名稱值來修復Nulls問題,因爲MVC綁定了輸入名稱。

HTML

<a class="post-checkboxes" href="#">post checkboxes</a> 
<input name="[MVC viewmodel list variable name]" type="checkbox" value="1" /> 
<input name="[MVC viewmodel list variable name]" type="checkbox" value="2" /> 

的Javascript

$('.post-checkboxes').click(function (e) { 
    e.preventDefault(); 
    $.post("[location to post to]", $("input:checked"));    
}); 
相關問題