如何在视图中使用键值对结构

时间:2015-02-02 11:58:36

标签: javascript c# asp.net-mvc razor model-view-controller

如何在javascript中使用KeyValue对(存储在ViewBag / ViewData中)。我需要一个KeyValue对结构,说一个来自控制器的字典,以便在视图中使用。

ViewBag.ContactTypes = new Dictionary<string,string>
                {
                    {"Home", "5"},
                    {"Cell", "6"},
                    {"Work", "7"},
                    {"Fax", "8"},
                    {"Other", "9"},
                };

&安培;我想通过键来访问这些字典值:

ViewBag.ContactTypes["Home"]

如何实现这个目标,任何想法?

2 个答案:

答案 0 :(得分:1)

这只是一个想法,如果没用,我会删除它。

在你的控制器中,我使用JsonSerializer(选择你最喜欢的一个),然后我将Json对象保存到viewBad中:

 ViewBag.ContactTypes = YourJsonConverter.serialize(new Dictionnary<string, string>{[...]});

然后,在视图中使用它作为字符串:

 <script type="text/javascript">
     var myJson = @Viewbag.ContactTypes
 </script>

答案 1 :(得分:0)

在您的视图中尝试此代码

首先,将您的Dictionary代码包装到JSON:

ViewBag.ContactTypes = Json(new Dictionary<string,string>
                {
                    {"Home", "5"},
                    {"Cell", "6"},
                    {"Work", "7"},
                    {"Fax", "8"},
                    {"Other", "9"},
                });

在你的cshtml文件中使用bellow javascript。

<script type="text/javascript" >
                var data = JSON.stringify(@Html.Raw(Json.Encode(ViewBag.ContactTypes)));
                data = JSON.parse(data);
                alert(data.Data.Home);
</script>

选中此fiddle

工作小提琴图像enter image description here

<强>建议

如果这些值是固定的,那么我建议在javascript文件中使用枚举,而不是从服务器中取出它。 相反,这些     {“Home”,“5”},     {“Cell”,“6”},     {“工作”,“7”},     {“传真”,“8”},     {“其他”,“9”},

在Common.JS文件的某个位置创建枚举

var myApp = myApp || {};
myApp.Enums = function () {
    ContactTypes = {
        Home: 5,
        Cell: 6,
        Work: 7,
        Fax: 8,
        Other: 9,
    };
    Status = {
        CREATED: "CREATED",
        INPROGRESS: "In Progress",
        Completed: { value: 3, name: "Completed", text: "Status Completed" }
    };
    return { Status: Status, ContactTypes: ContactTypes}
}();

<强> USAGE

alert(myApp.Enums.ContactTypes.Home);

为了获得更好的智能,只需在事务JS文件中拖动common.js即可。