私は2つのドロップダウンでUIを構築しようとしています。第1のものは「カテゴリー」であり、第2のものは「サブカテゴリー」である。私は私のかみそりのビューで "カテゴリ"の静的なリストを構築することができます。私は "サブカテゴリ"アイテムリストが "カテゴリ"が変更されたときに動的に更新されることを望みます。リストが大きくなく、セキュリティ上の問題がないので、私はサーバー側からクライアント側にすべてのカテゴリ情報を渡そうとしています。しかし私はデータをフォーマットしてクライアント側に転送する良い方法を見つけることができません。次のコードを使用して、すべてのカテゴリツリーを持つjsonオブジェクトを生成できます。mvcとjavascriptの間で複雑なデータを渡す方法
ExpandoObject catToSubcatMap = new ExpandoObject();
foreach (var cat in repository.Categories)
{
var subcats = repository.SubCategories.Where(s => s.ParentID == cat.CategoryID);
List<Object> subcatNameList = new List<object>();
foreach(var subcat in subcats)
{
subcatNameList.Add(new { Name = subcat.Name });
}
AddProperty(catToSubcatMap, cat.Name, subcatNameList);
}
Session["CatToSubcatMap"] = JsonConvert.SerializeObject(catToSubcatMap, Newtonsoft.Json.Formatting.Indented, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
json自体は完璧に見えます。私はjQueryの関数から値を読み取るしようとしたときしかし、それは失敗しました:
var sss = '@Session["CatToSubcatMap"]';
それはJSON文字列であまりにも多くの特殊文字があるように思えます。私の一般的な質問は、サーバーとクライアントの間でどのように複雑なデータをフォーマットして渡すべきかということです。 ViewbagやSessionのどちらを使うのが好ましいですか?
おかげ クリス
Knockout JSについて聞いたことがありますか?これを使用して、クライアントサイドのMVVMパターンを実装することができます。これは、ページを作成するために使用するモデルデータを取得し、JavaScriptビューモデルに変換し、クライアント更新に応じてページ上の要素を動的に更新するために使用します。私はノックアウトすることができます(pun)意図がここで簡単な説明が表示されますが、Webサイトを確認します:http://knockoutjs.com/ –
[この回答]の2番目の部分を参照してください(http://stackoverflow.com/質問/ 28627421/better-way-to-load-2-dropdown-in-mvc/28640420#28640420) –
具体的には、この質問の答えは、ViewBagを使用するか、セッション:http://stackoverflow.com/questions/12676924/what-is-the-right-time-for-viewdata-viewbag-session-tempdata –