2012-03-26 24 views
6

フォームのデータをJQuery Ajaxを使用してコントローラメソッドに渡そうとしていますが、デバッガを使用しているときにViewModelがnullであるため、コントローラ側。MVC3 JQuery Ajaxを使用してViewModelをコントローラメソッドに渡す

私のViewModelには、次のとおりです。

前提が私のデータベース内のエンティティ/テーブルです
public class PremisesViewModel 
{ 

    public string createPremisesErrorMessage { get; set; } 
    public string updatePremisesErrorMessage { get; set; } 

    public SelectList listOfCounties = Initialise.countiesSelectList; 

    public Premise premises { get; set; } 
} 

フォームには、プレミステーブルのフィールドが含まれています。私のjavascript関数で

私はこれを行う:私は私の方法でのViewModelパラメータをチェックするとき

var premisesViewModel = { 
           Id: 0, 
           PremisesDescription: $('#premises_PremisesDescription').val(), 
           OrdnanceSurveyReference: $('#premises_OrdnanceSurveyReference').val(), 
           PartRestrictedNotes: $('#premises_PartRestrictedNotes').val(), 
           NatureOfPremises: $('#premises_NatureOfPremises').val(), 
           AddressLine1: $('#premises_AddressLine1').val(), 
           AddressLine2: $('#premises_AddressLine2').val(), 
           Town: $('#premises_Town').val(), 
           CountyId: $('#premises_CountyId').val(), 
           Postcode: $('#premises_Postcode').val() 
          } 
    alert(form.serialize); 
    $.ajax({ 
     url: form.attr('action'), 
     type: 'POST', 
     dataType: "json", 
     contentType: 'application/json', 
     data: JSON.stringify(premisesViewModel), 
     success: function (data) { 
      alert('done'); 
     } 
    }) 

しかし、それがnullである:このようにマッピングする方法について

[HttpPost] 
    public JsonResult Create(PremisesViewModel pvm) 
    { 
     return null; 
    } 

任意のアイデアビューモデルが正しくバインドされていることを確認します。 ありがとう

+0

Firebugを使用して投稿要求を見ると、正しいデータが[作成]ページに送信されますか? –

答えて

5

JSON形式は、モデルクラスとまったく同じです。

現在の例

public class PremisesViewModel 
{ 

    public string createPremisesErrorMessage { get; set; } 
    public string updatePremisesErrorMessage { get; set; } 

    public SelectList listOfCounties = Initialise.countiesSelectList; 

    public Premise premises { get; set; } 
} 

あなたのJSON

var premisesViewModel = { 
            createPremisesErrorMessage : $('#premises_PremisesDescription').val(), 
            updatePremisesErrorMessage: $('#premises_OrdnanceSurveyReference').val(),  
            premises : {Define more properties here as per your Premise structure} 
           } 
+0

あなたが提案したとおりに変更され、扱いになります。詳細なコードをお寄せいただきありがとうございます。 – user1079925

4

投稿しているデータ内の変数の名前が、ASP.Net MVC ViewModelのプロパティの名前と一致していないため、データを正しくバインドできません。

5

のようなあなたが自動的にフォームのバインドされたビューモデルからモデルを構築したい場合は、この答えhttps://stackoverflow.com/a/1186309からコードを使用することができますJSONオブジェクトに適切にシリアル化します。

これで、$ .ajax呼び出しに文字列として渡す必要があります。まったく、あなたが元々持っていたものに非常によく似ています。次のようなものがあります:

var premisesViewModel = $('form').serializeObject(); 
$.ajax({ 
     url: form.attr('action'), 
     type: 'POST', 
     dataType: "json", 
     contentType: 'application/json', 
     data: JSON.stringify(premisesViewModel), 
     success: function (data) { 
      alert('done'); 
     } 
    }); 

JSONオブジェクトに変換するためのコア機能はありませんが、そこにはあります。

関連する問題