0

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)
4

1 に答える 1

0

MVC エンジンに渡されたデータを見ると、オブジェクトが JavaScript 形式でシリアル化されていることがわかりました。つまり、オブジェクトは のように見えましたObj[0]["id"]=5&Obj[0]["name"]="Bob"&Obj[1]["id"]=7&Obj[1]["name"]="Joe"。MVC は、このスタイルのオブジェクト表記を逆シリアル化するのに苦労しているようです。私の解決策は、jQuery が作成した文字列を取り、それを MVC が探していたものに置き換える単純な正規表現文字列置換メソッドを作成することでした。][これはオブジェクトごとに 1 か所でのみ発生するため、正規表現はパターンを探し、 .. 次に、 を探し.".+"]、最後の文字を空の文字列に置き換えました。クエリ文字列は次のようになりましたObj[0].id=5&Obj[0].name="Bob"&Obj[1].id=7&Obj[1].name="Joe". MVC はこの文字列を正しく解釈できました。これが MVC の問題なのか、jQuery が JS オブジェクトをシリアル化する方法の問題なのかはわかりませんが、面倒です。うまくいけば、誰かがより良い応答を投稿できます。

于 2012-08-17T16:52:58.500 に答える