jQuery Mobile と MVC3 バックエンドの両方を使用するプロジェクトに取り組んでいます。ページの 1 つで、ユーザーはいくつかのドロップダウン メニューからオプションを選択するか、デフォルトのままにするよう求められます。ページは、選択されたオプションを受け取り、それらをオブジェクトにスローしてから、サーバーに送信して次のページのデータを読み込みます。私はそれを行う2つの異なる方法を試しましたが、どちらの方法でも同じエラーが発生します。メイン オブジェクトは正しくシリアル化および逆シリアル化されますが、内部の配列は正しくありません。配列には正しい数の要素がありますが、その中にデータがありません。次のようにオブジェクトを作成します。
var obj = { };
obj.selections = new Array();
// customArr holds the data from the select lists and populates fine
$.each(customArr, function(key, value)
{
if(value== undefined)
return true;
obj.selections.push({
type: value.id,
subtype: value.subtype,
model: value.model
});
}
// Selected comes from data that was previously gathered
if(selected != undefined)
{
obj.mk = selected.mk;
obj.md = selected.md;
obj.yr = selected.yr;
}
obj.id = selectionID;
そして、データを取得する2つの方法を試しました。ページを直接移動しようとしました:
$.mobile.changePage('/Select/Data/', { data: obj });
上記のページをデータなしでロードしてみました (ハイパーリンクで jQuery Mobile データ属性を使用するだけです)。
$.ajax({
url: '/Select/Data/',
data: obj,
type: 'POST',
datatype: 'json',
error: function() { // Handle error },
success: function(response) {
// Load data
}
});
サーバー コードにブレークポイントを設定すると、返されたオブジェクトを確認できます。mk、md、および yr プロパティが入力され、selections 配列には 2 つのオブジェクトがありますが、タイプ、サブタイプ、およびモデル データは空です。ただし、JavaScript コードをステップ実行すると、期待どおりにすべてが作成されます。サーバーに送信される POST 変数も正しいように見えます。助言がありますか?
編集: C# オブジェクトは次のようになります。
public class ObjectModel
{
public int mk;
public int md;
public int yr;
public List<Mod> selections;
}
public class Mod
{
public int type;
public int subtype;
public string model;
}
コントローラーメソッドは次のようになります。
public ActionResult Data(ObjectModel objMod, int id = -1)