【问题标题】:How to use KeyValue pair structure in view如何在视图中使用键值对结构
【发布时间】:2015-04-01 08:56:37
【问题描述】:

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

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

& 我想通过如下键访问这些字典值:

ViewBag.ContactTypes["Home"]

如何实现这个目标,有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    然后,将其用作视图内的字符串:

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

    【讨论】:

    • 在 javascript 中获取它不是一个好的选择,您可以通过将其转换为 Dictionary 类型来简单地在视图中使用它。
    • 哎呀,我的错,我没有正确阅读问题,对不起@DeblatonJean-Philippe
    • 是否可以结合 Javascript 代码和服务器端值,例如:var myJson = @Viewbag.ContactTypes。 ??
    • @Viewbag.ContactTypes 里面的视图会在服务器端执行。 Javascript 将在客户端执行。这意味着一旦您的视图被发送到客户端,@ViewBag.ContactTypes 将被替换为将由客户端的 javascript 解析器解析的字符串
    【解决方案2】:

    在您的视图中尝试此代码

    首先,将您的字典代码包装成 JSON:

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

    在您的 cshtml 文件中使用下面的 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 文件中使用 Enums。 取而代之的是这些 {"家", "5"}, {"单元格", "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}
    }();
    

    用法

    alert(myApp.Enums.ContactTypes.Home);
    

    为了获得更好的智能,只需将您的 common.js 拖到您的事务 JS 文件中。

    【讨论】:

    • 小提琴页面不可用。我在这里遇到错误: var data = JSON.stringify(@Html.Raw(Json.Encode(ViewBag.ContactTypes)));作为结合 Javascript 和服务器端代码。
    • 您遇到了什么错误?尝试设置断点并验证您得到正确的值。
    猜你喜欢
    • 2022-01-09
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 2020-12-01
    • 1970-01-01
    相关资源
    最近更新 更多