C# 将字典转换为javascript使用
我有一个控制器动作,通过使用ViewBag将字典传递给视图C# 将字典转换为javascript使用,c#,asp.net,asp.net-mvc,razor,dictionary,C#,Asp.net,Asp.net Mvc,Razor,Dictionary,我有一个控制器动作,通过使用ViewBag将字典传递给视图 public async Task<ActionResult> MyAction() { Dictionary<ATypeViewModel, IEnumerable<BTypeViewModel>> all = await GetDictionary(); ViewBag.MyData = all; return View(); } 不幸的是,序列化的字符串不正确,因为它的
public async Task<ActionResult> MyAction() {
Dictionary<ATypeViewModel, IEnumerable<BTypeViewModel>> all = await GetDictionary();
ViewBag.MyData = all;
return View();
}
不幸的是,序列化的字符串不正确,因为它的格式如下
var collection = {
ATypeViewModel: [
{ BTypeID: 11, Description: "..." },
{ BTypeID: 12, Description: "..." },
{ BTypeID: 13, Description: "..." },
{ BTypeID: 14, Description: "..." }
],
ATypeViewModel: [
{ ServiceTypeID: 21, Description: "..." },
{ ServiceTypeID: 22, Description: "..." },
{ ServiceTypeID: 23, Description: "..." },
{ ServiceTypeID: 24, Description: "..." }
]
}
为什么键对象没有正确序列化?使用一个简单的示例创建字典:
@{
var services = new Dictionary<string, string> {{"1", "One"},{"2", "Two"}};
}
使用每个键和值循环它:
$.each(collection, function (key, value) {
console.log(key);
console.log(value);
});
控制台输出
更新
根据更新中提供的结构,嵌套循环将执行此操作,但如果结构发生更改,则需要对其进行调整
<script type="text/javascript">
var collection = {
ATypeViewModel: [
{ BTypeID: 11, Description: "..." },
{ BTypeID: 12, Description: "..." },
{ BTypeID: 13, Description: "..." },
{ BTypeID: 14, Description: "..." }
],
BTypeViewModel: [
{ ServiceTypeID: 21, Description: "..." },
{ ServiceTypeID: 22, Description: "..." },
{ ServiceTypeID: 23, Description: "..." },
{ ServiceTypeID: 24, Description: "..." }
]
}
$.each(collection, function (outerKey, outerValue) {
$.each(outerValue, function (key, value) {
$.each(value, function (innerkey, innervalue) {
console.log(innerkey);
console.log(innervalue);
});
});
});
</script>
变量集合={
ATypeViewModel:[
{B类型ID:11,说明:“…”},
{B类型ID:12,说明:“…”},
{B类型ID:13,说明:“…”},
{B类型ID:14,说明:“…”}
],
B类型视图模型:[
{ServiceTypeID:21,描述:“…”},
{ServiceTypeID:22,说明:“…”},
{ServiceTypeID:23,说明:“…”},
{ServiceTypeID:24,说明:“…”}
]
}
$.each(集合、函数(outerKey、outerValue){
$.each(外部值、函数(键、值){
$.each(值,函数(innerkey,innervalue){
console.log(innerkey);
log(innervalue);
});
});
});
请注意,我需要将您的属性从输出更改为
BTypeViewModel
。您可以使用JSON.net将字典序列化为JSON,然后在您的ViewBag中使用该字符串吗?可以。我的问题是如何从javascript使用它。你能给我看一个开始的示例吗?或者你使用一个api控制器并调用它来获取你的数据…@FlorianSchmidinger:我想避免在服务器上来回登录。每种类型的选项不超过4个,并且在begin@Lorenzo是的,你选择的方法很大程度上取决于我不知道的情况。ASG的方法也有其优点和缺点。谢谢你的回答。不幸的是,这不能正常工作。你能看一下我的编辑吗?@Lorenzo好的,给我几分钟。@Lorenzo不错,没问题。:)
@{
var services = new Dictionary<string, string> {{"1", "One"},{"2", "Two"}};
}
var collection = @Html.Raw(Json.Encode(services));
$.each(collection, function (key, value) {
console.log(key);
console.log(value);
});
<script type="text/javascript">
var collection = {
ATypeViewModel: [
{ BTypeID: 11, Description: "..." },
{ BTypeID: 12, Description: "..." },
{ BTypeID: 13, Description: "..." },
{ BTypeID: 14, Description: "..." }
],
BTypeViewModel: [
{ ServiceTypeID: 21, Description: "..." },
{ ServiceTypeID: 22, Description: "..." },
{ ServiceTypeID: 23, Description: "..." },
{ ServiceTypeID: 24, Description: "..." }
]
}
$.each(collection, function (outerKey, outerValue) {
$.each(outerValue, function (key, value) {
$.each(value, function (innerkey, innervalue) {
console.log(innerkey);
console.log(innervalue);
});
});
});
</script>