2016-03-30 167 views
2

我需要將多個select中的字符串列表傳遞給控制器​​。雖然這個要求對我來說很簡單,但在這個過去的一個小時裏,我一直在爲我着迷。我對此進行了公正的研究,但無法取得成功。使用ajax將字符串數組傳遞給mvc控制器

以下是我的Javascript代碼。請忽略評論。我成功地能夠獲取多重選擇中的項目列表。雖然我的Ajax調用,我得到錯誤「對象引用未設置對象的實例。

function submitForm() { 
    var selected = $('#selectedTasks option').map(function(){ 
     return this.value 
    }).get() 
    var postData = { selectedTasks : selected } //corrected as suggested 

    //selectedTasks = JSON.stringify({ 'selectedTasks': selected }); 
    alert(postData); 

    $.ajax({ 
     type: "POST", 
     //contentType: 'application/json; charset=utf-8', 
     url: '@Url.Action("AssignTasks", "MonthEndApp")', 
     dataType: 'json', 
     data: postData, 
     traditional: true, 
     success: function (data) {     
      alert("Success"); 
     }, 
     error: function (xhr) {      
      alert(xhr.responseText); 
     } 
    }); 
} 

MonthEndAppController.cs

[HttpPost] 
public void AssignTasks(List<String> selectedTasks) 
{ 
    //do something 
} 

有人能指導我哪兒我已經錯了嗎?有人可以建議我什麼是錯的嗎?

編輯:正如Rory先生所建議的那樣,我對java腳本進行了修改,現在Java腳本部分工作得非常好,但是在發出ajax請求時控制器沒有被調用如果有什麼不對,我可以幫助我嗎? ñ對控制器的呼叫?

回答

1

您是否使用string[]而不是List<String>

1

AssignTasks行動期待的參數稱爲selectedTasks,不values

var postData = { selectedTasks: selected }; 

還要注意的是,在JS調試東西的時候,你應該總是使用console.log()alert(),因爲後者強求所有類型爲字符串,這意味着你沒有看到實際值的真實表示。

+0

謝謝你的建議。這是我的錯誤。感謝您指出。它確實有效(JavaScript部分)。但是調試時控制器不會移動到控制器上。它只顯示一個警告「成功」,但不知道爲什麼控制不能移動。你看到控制器有任何問題嗎? – user3173346

+0

@ user3173346而不是[httppost]嘗試[webmethod]? – codemonkeyliketab

相關問題