2011-01-22 15 views
0

モデルデータとJSONデータを1回のリクエストで送信する必要があります。それはどういう意味:ASP .NET MVC + Submit + JSON

私はこの機能でJSONデータを送信する場合:

$("#SaveOrder").click(function() { 
     $.ajax({ 
      url: '/Manager/AddOrder', 
      type: 'POST', 
      dataType: 'json', 
      data: $.toJSON(ResultArray), 
      contentType: 'application/json; charset=utf-8' 
     }); 
    }); 

私は

public ActionResult AddOrder(SUPNew.Models.Order newOrder, List<OrderList> ResultArray)

SUPNew.Models.Order newOrder = null 
List<OrderList> ResultArray = not null 

を持っていますが、私は<input type="submit">でリクエストを送信する場合、私は

を持っています
SUPNew.Models.Order newOrder = not null 
List<OrderList> ResultArray = null 

jQuery配列(JSONデータ)とSUPNew.Models.Orderを1回のリクエストで送信するにはどうすればよいですか? ResultArrayがあるResultArray- $ .toJSON(ResultArray)、の


コンテンツjQueryの配列のように:

var CurrentOrder = 
      [{ 
       'ProviderAn': $("#DdlProviders").val(), 
       'ItemAn': $("#DdlItems").val() 
      }]; 

そして、これはMVC 2

ある
+0

ResultArrayの内容は何ですか?そして、このMVC 3ですか? –

答えて

5

要求内容を設定することを忘れないでください。タイプ:

$('#SaveOrder').click(function() { 
    $.ajax({ 
     url: '/Manager/AddOrder', 
     type: 'POST', 
     dataType: 'json', 
     data: JSON.stringify({ 
      newOrder: { orderProp1: 'value1', orderProp2: 'value2' }, 
      resultArray: [ 
       { orderListProp1: 'value1', orderListProp2: 'value2' }, 
       { orderListProp1: 'value3', orderListProp2: 'value4' }, 
       { orderListProp1: 'value5', orderListProp2: 'value6' } 
      ] 
     }), 
     contentType: 'application/json; charset=utf-8', 
     success: function(result) { 
      // the request succeeded 
     } 
    }); 

    // Don't forget to cancel the default action or if SaveOrder 
    // is some link you might get redirected before the 
    // AJAX call ever had time to execute 
    return false; 
}); 

サーバー側で、これらの2つを集計する新しいビューモデルが必要な場合がありますオブジェクト:

public class MyViewModel 
{ 
    public Order NewOrder { get; set; } 
    public List<OrderList> ResultArray { get; set; } 
} 

と持っている:

サーバー側でも
[HttpPost] 
public ActionResult AddOrder(MyViewModel model) 
{ 
    ... 
} 

あなたがcustom handler capable of parsing itを記述する必要がデフォルトでJSONをサポートしてASP.NET 3.0を使用している場合を除き。


UPDATE:

あなたはJSONとしてフォームをシリアル化するためにthe followingを使用することができます。

$.fn.serializeObject = function() 
{ 
    var o = {}; 
    var a = this.serializeArray(); 
    $.each(a, function() { 
     if (o[this.name]) { 
      if (!o[this.name].push) { 
       o[this.name] = [o[this.name]]; 
      } 
      o[this.name].push(this.value || ''); 
     } else { 
      o[this.name] = this.value || ''; 
     } 
    }); 
    return o; 
}; 

、その後:

$.ajax({ 
    url: '/Manager/AddOrder', 
    contentType: 'application/json', 
    type: 'POST', 
    dataType: 'json', 
    data: JSON.stringify({ 
     newOrder: $('#SaveOrder').serializeObject(), 
     resultArray: [ 
      { orderListProp1: 'value1', orderListProp2: 'value2' }, 
      { orderListProp1: 'value3', orderListProp2: 'value4' }, 
      { orderListProp1: 'value5', orderListProp2: 'value6' } 
     ] 
    }), 
    contentType: 'application/json; charset=utf-8' 
}); 
+0

Ok、thx ........ – FSou1

+0

いいえ、問題は解決しませんでした。私は必要があります: – FSou1

+0

@ user568262、私の答えでは、両方の 'NewOrder'と' ResultArray'プロパティを集約し、それらを単一のJSONオブジェクトとして送信するビューモデル( 'MyViewModel')を使うことを提案しました。 'NewOrder'プロパティを' form.serialize() 'を使って割り当てることができ、私の例のように' ResultArray'プロパティを残すことができます。これはあなたのために働いていないのですか? –