4

既存の JsonResult (別のメソッドから返される) にいくつかの追加情報を追加することにより、Controller で JsonResult を構築しています。さらにプロパティを追加するために、最初の JsonResult を Dictionary に変換しました。

IDictionary<string, object> wrapper = (IDictionary<string, object>)new 
     System.Web.Routing.RouteValueDictionary(json.Data);

次に、書き込みによってデータを追加するだけwrapper["..."] = "value"です。

このメソッドは、ラッパーを .Data として、新しい JsonResult を返します。

new JsonResult() { wrapper, JsonRequestBehavior.AllowGet };

そこから問題が始まります。通信は完全に行われ、success 関数が呼び出されますが、JavaScript で使用する結果の配列は、私が期待するきれいな構造を持っていません:val = ret.PropName1;単純なインデックス付き配列にアクセスする必要があるため、値にアクセスする代わりに、 2つのペアを持つ辞書: { "Value"="val, "Key"="PropName1" };(そのため、次のようなものo[0].Keyでプロパティ名が得られます)

ビューできれいな辞書を取得するために、コントローラーで JsonResult の作成を書き直すスマートで高速な方法があるかどうかを知りたいです。私にはいくつかのアイデアがありますが、それらは特にきれいではありません。サーバー側での JsonResult の再利用を捨てて、すべての適切なプロパティを持つ匿名オブジェクトを作成するだけです。または、結果を new Array() に変換できる変換関数を Javascript で作成することもできます。より良い解決策を探しています。

[後で編集]辞書が として定義されているため、配列はそのようになり<string, object>ます。もしそうなら<string, string>、それは私が当初期待していた方法で送られます. しかし、実際にはそのバッグのオブジェクトを使用するので、そのままにして、json 応答を以下の関数に渡します。

4

1 に答える 1

1

補遺: 上記の質問を書いているときに、「悪い」配列と「良い」配列の間の変換は実際には非常に単純であることに気付きました。

    function translateAjaxResult(ret) {
        var result = new Array();

        if (ret == null) return result;
        for(var i = 0; i < ret.length; i++)
            result[ret[i].Key] = ret[i].Value;
        return result;
    }

とはいえ、これは問題に対するパッチであり、問​​題の修正ではないため、より洗練されたソリューションが必要です。

于 2010-11-23T13:26:28.130 に答える