如何在javascript中使用KeyValue对(存储在ViewBag / ViewData中)。我需要一个KeyValue对结构,说一个来自控制器的字典,以便在视图中使用。
ViewBag.ContactTypes = new Dictionary<string,string>
{
{"Home", "5"},
{"Cell", "6"},
{"Work", "7"},
{"Fax", "8"},
{"Other", "9"},
};
&安培;我想通过键来访问这些字典值:
ViewBag.ContactTypes["Home"]
如何实现这个目标,任何想法?
答案 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
工作小提琴图像
<强>建议强>
如果这些值是固定的,那么我建议在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即可。