2016-03-30 17 views
2

複数選択から文字列のリストをコントローラに渡す必要があります。要件は私にとっては非常にシンプルに見えましたが、私はこれで過去1時間頭を壊していました。私はこれについて公正な研究をしましたが、成功することはできません。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 
} 

誰かが私を導くことはできますか?誰かが私に何か間違っていると教えてもらえますか?

EDIT:私はJavaスクリプトの変更を行っていますが、Javaスクリプトの部分は問題なく動作しますが、コントローラはajax要求が行われたときに呼び出されません誰か間違っていると私を助けてくれる? nコントローラへのコール?

答えて

1

List<String>の代わりにstring[]を試しましたか?

1

あなたAssignTasksアクションが期待されるパラメータがないvaluesselectedTasksと呼ばれる:

var postData = { selectedTasks: selected }; 

はまたJSで何かをデバッグするとき、後者は文字列にすべてのタイプを強制して、いつでも、alert()console.log()を使用する必要があることに注意してくださいこれは、実際の価値を真に表現していないことを意味します。

+0

ありがとうございます。それは私の側でトータルなミスでした。それを指摘してくれてありがとう。それは実際に(javascriptの部分)働いた。しかし、制御はコントローラに移動せず、デバッグ中です。それはちょうど警告 "成功"が表示されますが、なぜコントロールが移動していないのかわかりません。コントローラーに問題はありますか? [httppost]の代わりに – user3173346

+0

@ user3173346 [webmethod]を試してみませんか? – codemonkeyliketab

関連する問題