ピースペース

jsonデータをページに埋め込む

leave a comment »

jqueryなUI Toolで、使用するデータをサービスから受け取るようにURLプロパティを持つものがある。
例えば、easyUIのtableやtreeのようなコンポーネント。
もちろん、そのデータを用意するjsonResultなサービスメソッドを追加すれば良いのだが、
ajaxで部分HTMLを更新してるような場合、その応答にデータも一緒にパックした方が効率が良い。
ってパターンがあるよね。

最初、その埋め込みを@Html.Actionで行おうとしたら、
何故かクライアント側でページを更新してくれない??に、はまった;
いくら応答を調べても、内容に間違いはないような気がする。なんで?
は、何故か応答のcontext typeが子Actionのjsonになっていた!
え~~なんで~~そんな仕様(T.T)

原因と対策もよくわからなくて面倒なので、自前でjsonシリアライズして埋め込んだ。
プロジェクトにはひとつjsonシリアライザを用意しておくようにしとけば良いかもしれない。

public static string SerializeToJson<T>(T srcObj)
        {
            var serializer =new System.Runtime.Serialization.Json.DataContractJsonSerializer(srcObj.GetType());
            using (MemoryStream memStr = new MemoryStream())
            {
                serializer.WriteObject(memStr, srcObj);
                string json = Encoding.UTF8.GetString(memStr.ToArray());
                return json;
            }
        }

UIコンポ側は、こんな感じ

$(‘#funcTree’).tree({
                data: @(Html.Raw(treeData)),
                checkbox: true
});

Written by nasu38yen

2014年7月11日 @ 5:50 PM

カテゴリー: 未分類

Tagged with

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。