2013-05-29 38 views
0

我想通過檢查框的ID使用ajax控制器。這裏是jQuery:ajax沒有傳遞數組到控制器

function compareEvents() { 
     var selected = new Array(); 
     $('input:checked').each(function() { 
      selected.push($(this).attr('id')); 
      alert("Event " + $(this).attr('id') + " will be compared"); 
     }); 

     $.ajax({ 
      url: "/Event/CompareEvents", 
      contentType: "application/x-www-form-urlencoded", 
      type: "POST", 
      datatype: "json", 
      data: JSON.stringify({eventIds:selected}), 
      error: function (xmlHttpRequest, errorText, thrownError) { 
       alert(xmlHttpRequest, errorText, thrownError); 
      }, 
      success: function (data) { 
       alert("success"); 
       document.location = data; 
      } 
     }); 

該警報成功返回選中的複選框的ID。完成後返回成功消息。

這裏是控制器方法:

[HttpPost] 
    public ActionResult CompareEvents(List<int> eventIds) 
    { 
     return null; 
    } 

這被稱爲成功,當我調試,eventIds將返回null除外。任何人都可以看到爲什麼eventIds沒有得到正確的值?

回答

2

您發送JSON:

data: JSON.stringify({ eventIds:selected }), 

和頭部的contentType設置爲"application/x-www-form-urlencoded"

要與您發送什麼一致的:

contentType: "application/json", 

也沒有叫datatype這樣的設置。實際設置爲dataType,但它是多餘的,因爲如果您的控制器操作將內容類型響應標頭設置爲application/json(如果您要返回JsonResult,通常應該這樣做),jQuery足夠智能以使用此標頭並處理來自服務器並將已分析的對象傳遞給您的成功回調。

相關問題