2012-09-24 41 views
15

私は今日これを理解しようと8時間ほどかかりました。私は多くのソリューションを見てきましたが、同じ結果を得ることはできません。私はそれがASP.Netに比較的新しいことと関係があると思います。jQueryポスト配列 - ASP.Net MVC 4

ここで私は運がないと模倣した最新の質問です。問題の https://stackoverflow.com/questions/10007722/post-array-as-json-to-mvc-controller#=

How to post an array of complex objects with JSON, jQuery to ASP.NET MVC Controller?

基本ランダウン: 私は私のコントローラに渡すしたいJSONオブジェクトの配列を持っています。私が示したデータを渡すと、たとえば3つの項目が示されますが、その値は渡されないか、何も渡されなかったことだけが示されます。 Firebugは、それが渡されたことを示しているので、何かが正しく設定されておらず、その変数をC#側で正しく設定することができないと仮定します。

私はいくつかのことや病気のリストの下にそれらを試してみました: セットアップ1: 私は2番目のリンクで見られるものをからかってみました:

$.ajax({ 
     type: 'Post', 
     cache: false, 
     url: '/Workflow/Home/UpdateStepPositions', 
     data: { 'steps': ['1','2','3'] }, 
     async: false, 
     success: function (data) { 
      console.debug(data); 
     }, 
     error: function (data) { 
      console.debug(data); 
     } 
    }); 

Controller 
[HttpPost] 
    public ActionResult UpdateStepPositions(string[] steps){ 

     var bresults = new { 
      Success = false, 
      Message = "Unable to update step positions." 
     }; 

     return Json(bresults); 
    } 

私もそのシンプルなセットアップ作業を取得できませんでした。 。これは、関数に取得し、渡されたものは何もありませんでした....示し

セットアップ2:

list = new Array(); 
    list.push({ "step": 1, "position": 1 }); 
    list.push({ "step": 2, "position": 2 }); 
    list.push({ "step": 3, "position": 3 }); 

    $.ajax({ 
     type: 'Post', 
     cache: false, 
     url: '/Workflow/Home/UpdateStepPositions', 
     data: JSON.stringify({ 'steps': list }), 
     async: false, 
     success: function (data) { 
      console.debug(data); 
     }, 
     error: function (data) { 
      console.debug(data); 
     } 
    }); 

    Controller 
    [HttpPost] 
    public ActionResult UpdateStepPositions(List<UpdatedSteps> steps){ 
     var bresults = new { 
      Success = false, 
      Message = "Unable to update step positions." 
     }; 

     return Json(bresults); 
    } 

    Class 
    public class UpdatedSteps { 
    public string Step { get; set; } 
    public string Position { get; set; } 
} 

誰でもワットにいくつかの光を当てることができます帽子私は行方不明か、正しい方向に私を指摘していますか?うまくいけば、そのシンプルなだけの初心者の間違い!

+2

絶対に必要でない限り、あなたは '非同期使用すべきではありませんajax呼び出し。 AJAXは非同期になっています。これをオフにすると、ajax呼び出し中にブラウザが応答しなくなる可能性があります。 – MrOBrian

答えて

38

MVCはcontentTypeで受信するデータのタイプを検出します。ここで働いている例:要求と今

$(function() { 
    $.ajax({ 
     type: 'Post', 
     dataType: 'json', 
     url: '/Workflow/Home/UpdateStepPositions', 
     data: JSON.stringify({ steps: ['1', '2', '3'] }), 
     contentType: 'application/json; charset=utf-8', 
     async: false, 
     success: function (data) { 
      console.debug(data); 
     }, 
     error: function (data) { 
      console.debug(data); 
     } 
    }); 
}); 

すべてOK:

Content-Type:  application/json; charset=utf-8 
X-Requested-With: XMLHttpRequest 

と応答:中false`を:

Content-Type:  application/json; charset=utf-8 
+0

これを試して報告します。 – Silent

+0

私はそのコードをコピーして貼り付けました。ここでコントローラに入っています。同じ問題です。私はほとんどの日に戦っています! steps = null – Silent

+0

@Austin Reynolds申し訳ありません、新しいソリューションをお試しください。 – webdeveloper

関連する問題