2016-10-16 41 views
0

我有一個jquery的鍵 - 值對陣列如下:當檢查複選框被選中 傳遞鍵 - 值對的jquery陣列分成.NET MVC動作

  • 如果複選框是

    • 陣列填充不加以控制,項目將在那裏

    除去該部分的代碼是:

    $(document).on('click', '.chkItem', function() { 
          if ($(this).is(':checked')) { 
           product_ids[$(this).attr('id')] = "Checked"; 
          } else { 
           delete product_ids[$(this).attr('id')]; 
          } 
         }); 
    

    這很好,讓我們來看看下一部分。現在,我想從我的觀點發送所有這些ID的到控制器「分析」和行動「指數」,它看起來如下:

    $(".btnAnalyze").click(function() { 
          if (jQuery.isEmptyObject(product_ids) == true) { 
           alert("Array is empty"); 
          } 
          else { 
    
           var postData = { values: product_ids }; 
    
           $.ajax({ 
            type: "POST", 
            url: "/Analyze/Index", 
            data: postData, 
            success: function (data) { 
             alert(data.Result); 
            }, 
            dataType: "json", 
            traditional: true 
           }); 
    
          } 
         }); 
    

    我的行動看起來像以下:

    public ActionResult Index(List<string> values) 
         { 
          string id2= ""; 
          foreach (var id in values) 
          { 
           id2= id; 
          } 
    // I'm trying to fetch the ID values here that I added into the array, but I'm not sure how... 
    
    } 
    

    有了這個當前方法列表值的內容是

    "[object Object]" 
    

    這不是我想要的。我需要的所有的ID的整理出很好的進入名單,我送他們到行動指數...

    有人可以幫我解決這個問題嗎?

  • +0

    Anyony有任何想法如何做到這一點? – User987

    +0

    首先,放慢速度。堆棧溢出不是你個人回答的奴隸。其次,'product_ids'不是一個數組;它是一個帶有密鑰的對象,就是你的ID。你可以在['Object.keys()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys)上做一些研究。 –

    +0

    你能否提供一個更合理的答案......我意識到這不是我個人回答奴隸,也沒有考慮過這個問題......現在回到我的第一個問題,你能提供一個答案,以便我可以接受它,如果它是正確...... – User987

    回答

    1

    您使用的是對象而不是數組,因此它說它是一個對象。你有兩個選擇:

    1. 使用一個實際的數組:

      var product_ids = []; 
      $(document).on('click', '.chkItem', function() { 
          if ($(this).is(':checked')) { 
          product_ids.push($(this).attr('id')); 
          } else { 
          product_ids.splice(product_ids.indexOf($(this).attr('id')), 1); 
          } 
      }); 
      
    2. 繼續使用對象和使用Object.keys得到公正的屬性名稱(這是在你的代碼的ID):

      var postData = { values: Object.keys(product_ids) }; 
      

    就我個人而言,我喜歡#1,因爲它更明確地表示您捕獲的ID選中的複選框以及對象屬性的值始終爲"Checked",而不是任何有意義的內容,但是,嘿,JavaScript就像這樣靈活:)。

    +0

    是的,你有一點,#1好得多:) – User987

    0

    使用console.log(data.Result)調試,而不是alert(data.Result),因爲alert(data.Result)stringifies您的變量[object Object]。要打開控制檯,請按F12

    +0

    我做到了,它仍然是一樣的... – User987

    +0

    你可以顯示你在服務器端收到並回到ajax'success'回電話? – gskema