c# – 转换字典以供javascript使用

前端之家收集整理的这篇文章主要介绍了c# – 转换字典以供javascript使用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个控制器动作,通过使用ViewBag将Dictionary传递给视图.
public async Task<ActionResult> MyAction() {
    Dictionary<ATypeviewmodel,IEnumerable<BTypeviewmodel>> all = await GetDictionary();
    ViewBag.MyData = all;
    return View();
}
@H_403_4@在视图内部,我需要使用此字典来创建级联单选按钮列表.第一个列表将包含键值

@{
    Dictionary<ATypeviewmodel,IEnumerable<BTypeviewmodel>> services = ViewBag.MyData;
}

@foreach ( KeyValuePair<ATypeviewmodel,IEnumerable<BTypeviewmodel>> entry in services ) {
    <div class="radio">
        <label for="aType"><input type="radio" name="aType" value="@entry.Key.ATypeID" />&nbsp;&nbsp;@entry.Key.Description</label>
    </div>
}
@H_403_4@我需要jQuery来创建这个代码但不幸的是我不知道如何转换javascript使用的字典.

@H_403_4@编辑:

@H_403_4@在hutchonoid回答之后,我使用Json.NET将我的字典序列化为json.

Dictionary<ATypeviewmodel,IEnumerable<BTypeviewmodel>> list = new Dictionary<ATypeviewmodel,IEnumerable<ATypeviewmodel>>();
[...]
return await JsonConvert.SerializeObjectAsync( list );
@H_403_4@然后在我的javascript代码添加

var collection = @Html.Raw( Json.Encode(services) );
@H_403_4@遗憾的是,序列化字符串不正确,因为它是以下形式

var collection = {
    ATypeviewmodel: [
        { BTypeID: 11,Description: "..." },{ BTypeID: 12,{ BTypeID: 13,{ BTypeID: 14,Description: "..." }
    ],ATypeviewmodel: [
        { ServiceTypeID: 21,{ ServiceTypeID: 22,{ ServiceTypeID: 23,{ ServiceTypeID: 24,Description: "..." }
    ]
}
@H_403_4@为什么关键对象没有正确序列化?

解决方法

使用一个简单的例子创建一个字典:
@{
   var services = new Dictionary<string,string> {{"1","One"},{"2","Two"}};
 }
@H_403_4@在您的JavaScript中序列化它

var collection = @Html.Raw(Json.Encode(services));
@H_403_4@使用键和值使用每个循环它:

$.each(collection,function (key,value) {
               console.log(key);
               console.log(value);
            });
@H_403_4@控制台输出

@H_403_4@更新

@H_403_4@根据更新中提供的结构,嵌套循环可以执行此操作,如果结构发生更改,则需要对其进行调整.

<script type="text/javascript">
    var collection = {
        ATypeviewmodel: [
            { BTypeID: 11,Description: "..." }
        ],BTypeviewmodel: [
            { ServiceTypeID: 21,Description: "..." }
        ]
    }

    $.each(collection,function (outerKey,outerValue) {

        $.each(outerValue,value) {

                $.each(value,function (innerkey,innervalue) {
                    console.log(innerkey);
                    console.log(innervalue);
                });
            });

        });

 </script>
@H_403_4@请注意我需要从您的输出中将您的属性更改为BTypeviewmodel.

猜你在找的C#相关文章