2013-12-11 25 views
2

我想從我的AJAX帖子中發送JSON形式的一些數據到C#中的控制器方法。雖然我沒有收到任何數據。我正在驗證數據是否存在,因此在Ajax的第二位之前有一個console.log(data.model)來做到這一點。無論什麼模型在C#方面始終是空的。傳遞數據的Ajax在C#中顯示爲空?

的Javascript帖子:

$.ajax({ 
    data: model, 
    cache: false, 
    type: 'post', 
    traditional: true, 
    url: mod.RespondentsTableUrl, 
    success: function (data) { 
     console.log(data.model); 
     if (data.success) { 
      $('table.coldListTable').dataTable().fnRefreshTable(data.model); 

      $('#numberOfResults').text(data.model.length); 
      if (thereAreFiltersInPlace(model)) { 
       $('#coldListFilterForm div.alert-container > div.nNote > p').text(String.format(Culture.Phrases.FiltersNoteFormat, data.model.length)); 
       $('#coldListFilterForm div.alert-container > div.nNote.dn').removeClass('dn'); 
      } 
      else { 
       $('#coldListFilterForm div.alert-container > div.nNote').addClass('dn'); 
      } 

      console.log(JSON.stringify(data.model)); 
      $.ajax({ 
       data: JSON.stringify(data.model), 
       cache: false, 
       type: 'post', 
       url: 'Respondents/DownloadCSV', 
      }); 
     } 
     else { 
      errorDialog(); 
     } 
    }, 
    error: errorDialog, 
    complete: function() { 
     //unhide cold list/filters, hide loader div. 
     $('#loader').addClass('dn'); 
    } 
}); 

型號:

public class RespondentCoreDataViewModel 
    { 
     public RespondentsData[] RepondentsCore { get; set; } 
    } 

    public class RespondentsData 
    { 
     public string Class { get; set; } 
     public Data Data { get; set; } 
     public int Id { get; set; } 
     public string Url { get; set; } 
     public object HtmlAttributes { get; set; } 
     public bool IsLocked { get; set; } 
    } 

    public class Data 
    { 
     public string Name { get; set; } 
     public string Source { get; set; } 
     public object Email { get; set; } 
     public string City { get; set; } 
     public string State { get; set; } 
     public string Gender { get; set; } 
     public string Ethnicity { get; set; } 
     public string Age { get; set; } 
     public string LastRecruiter { get; set; } 
     public string OwningRecruiter { get; set; } 
     public string RecruitingGroup { get; set; } 
     public string LastActionDate { get; set; } 
     public string Status { get; set; } 
     public string _class { get; set; } 
     public string url { get; set; } 
     public int Id { get; set; } 
     public long created { get; set; } 
    } 

控制器的方法:

[HttpPost] 
     public ActionResult DownloadCSV(RespondentCoreDataViewModel model) 
     { 
      ....random code in here 
     } 

最後JSON字符串櫃面有人有興趣:

[{"Class":"respondent clickable gradeA","Data":{"Name":"John Keys","Source":"<span style=\"display:none;\" >Database</span><i class=\"tipN icon-tasks\" original-title=\"Database\"></i>","Email":null,"City":"","State":"","Gender":"","Ethnicity":"","Age":"","LastRecruiter":"Ben Mabry","OwningRecruiter":"Ben Mabry","RecruitingGroup":"Board 2- Competitive Users","LastActionDate":"<span class=\"dn\">20131008175555</span>10/8 5:55 PM","Status":"<span style=\"display:none;\" >Completed</span><i class=\"tipN icon-check\" original-title=\"Completed\"></i>","class":"respondent clickable gradeA","url":"/Projects/644/Respondents/260619/Overview","Id":260619,"created":1386796133808},"Id":260619,"Url":"/Projects/644/Respondents/260619/Overview","HtmlAttributes":null,"IsLocked":false},{"Class":"respondent clickable gradeA","Data":{"Name":"Jim Walser","Source":"<span style=\"display:none;\" >Database</span><i class=\"tipN icon-tasks\" original-title=\"Database\"></i>","Email":null,"City":"","State":"","Gender":"","Ethnicity":"","Age":"","LastRecruiter":"Ben Mabry","OwningRecruiter":"Ben Mabry","RecruitingGroup":"Board 2- Competitive Users","LastActionDate":"<span class=\"dn\">20131008175529</span>10/8 5:55 PM","Status":"<span style=\"display:none;\" >Completed</span><i class=\"tipN icon-check\" original-title=\"Completed\"></i>","class":"respondent clickable gradeA","url":"/Projects/644/Respondents/260620/Overview","Id":260620,"created":1386796133808},"Id":260620,"Url":"/Projects/644/Respondents/260620/Overview","HtmlAttributes":null,"IsLocked":false},{"Class":"respondent clickable gradeA","Data":{"Name":"Jill Lellis","Source":"<span style=\"display:none;\" >Database</span><i class=\"tipN icon-tasks\" original-title=\"Database\"></i>","Email":null,"City":"","State":"","Gender":"","Ethnicity":"","Age":"","LastRecruiter":"Luanne Jones","OwningRecruiter":"Luanne Jones","RecruitingGroup":"Board 1-Mission Brand","LastActionDate":"<span class=\"dn\">20131009110258</span>10/9 11:02 AM","Status":"<span style=\"display:none;\" >Completed</span><i class=\"tipN icon-check\" original-title=\"Completed\"></i>","class":"respondent clickable gradeA","url":"/Projects/644/Respondents/260621/Overview","Id":260621,"created":1386796133808},"Id":260621,"Url":"/Projects/644/Respondents/260621/Overview","HtmlAttributes":null,"IsLocked":false},{"Class":"respondent clickable gradeA","Data":{"Name":"Charlie Neese","Source":"<span style=\"display:none;\" >Database</span><i class=\"tipN icon-tasks\" original-title=\"Database\"></i>","Email":null,"City":"","State":"","Gender":"","Ethnicity":"","Age":"","LastRecruiter":"Luanne Jones","OwningRecruiter":"Luanne Jones","RecruitingGroup":"Board 2- Competitive Users","LastActionDate":"<span class=\"dn\">20131009112301</span>10/9 11:23 AM","Status":"<span style=\"display:none;\" >Completed</span><i class=\"tipN icon-check\" original-title=\"Completed\"></i>","class":"respondent clickable gradeA","url":"/Projects/644/Respondents/260622/Overview","Id":260622,"created":1386796133808},"Id":260622,"Url":"/Projects/644/Respondents/260622/Overview","HtmlAttributes":null,"IsLocked":false},{"Class":"respondent clickable gradeA","Data":{"Name":"Tara Reid","Source":"<span style=\"display:none;\" >Database</span><i class=\"tipN icon-tasks\" original-title=\"Database\"></i>","Email":null,"City":"","State":"","Gender":"","Ethnicity":"","Age":"","LastRecruiter":"Luanne Jones","OwningRecruiter":"Luanne Jones","RecruitingGroup":"Board 2- Competitive Users","LastActionDate":"<span class=\"dn\">20131009112221</span>10/9 11:22 AM","Status":"<span style=\"display:none;\" >Completed</span><i class=\"tipN icon-check\" original-title=\"Completed\"></i>","class":"respondent clickable gradeA","url":"/Projects/644/Respondents/260623/Overview","Id":260623,"created":1386796133808},"Id":260623,"Url":"/Projects/644/Respondents/260623/Overview","HtmlAttributes":null,"IsLocked":false}] 
+1

在你的ajax調用中添加'contentType:'application/json; charset = utf-8'和'dataType:'json''。如果一切正常,這應該解決問題。 –

+1

你的電話應該看起來像 'jQuery。AJAX({ 類型: 'POST', 網址:網址, 的contentType: '應用/ JSON;字符集= UTF-8', 數據:數據, 數據類型: 'JSON', 成功:successCallBack, 錯誤: errorCallBack, })' –

+0

@ShuhelAhmed我同意'callBack'函數設置不正確。我在不久前第一次學習時遇到了與ajax類似的問題。 – Kendra

回答

0

嘗試Newtonsoft.Json與PM控制檯添加到您的項目:

install-package Newtonsoft.Json 

,重建您的解決方案。

1

你很近。我想這是因爲你的動作方法需要稱爲命名參數「模式」,你需要這樣做:

$.ajax({ 
data: {model: model}, 
... 

我認爲,如果你補充一點,你的Ajax請求將在會得到自動映射格式發送數據到你的動作方法參數。

BTW它會更好,如果你命名的參數之一,數據:{模式:模式}是不是好的做法IMO我會重新命名你的js變量名稱爲清楚起見類似:

$.ajax({ 
data: {model: jsModel}, 
+0

我相信這也與它有關。雖然當我進行更改時,我得到一個新的錯誤:[ArgumentException:無效的JSON基元:模型。] – allencoded

+0

您是控制器操作拋出此錯誤? – cobolstinks

+0

我發現我的問題是在我的ajax。我發佈了上面的修復程序 – allencoded

0

假設正在發送JSON(在ajax調用中的data: model的模型)是有效的,我會按照Roman的建議進行操作...將Newtonsoft.Json添加到您的項目中。

你也應該用JSON處理,而不是的ActionResult時使用JsonResult方法:

public JsonResult DownloadCSV(RespondentCoreDataViewModel model) 
{ 
    // blah blah 
} 
2

其實我有一個similar problem.

礦的解決方案是在塊:

success: function() { 
//code here 
} 

你需要把你的成功函數的名字放在這裏。例如:

success{ 
//code here 
} 

ajaxSuccess(result) 
{ 
//code here 
} 
0

我找到了答案。我不得不改變我的ajax腳本看起來像這樣,它只是工作!哦,並忽略那些測試的成功和錯誤。

$.ajax({ 
         data: JSON.stringify(data.model), 
         contentType: 'application/json', 
         type: 'POST', 
         url: 'Respondents/DownloadCSV', 
         success: function() { alert('success'); }, 
         error: function() { alert('unsuccessful'); }, 
        }); 
相關問題