【问题标题】:access a backend variable in front end using javascript使用 javascript 访问前端的后端变量
【发布时间】:2014-11-09 19:11:42
【问题描述】:

我在后面的代码中将 Dictonary 公开声明为:

 Public dics As New Dictionary(Of String, String()) From { _
{"picture", New String() {".jpeg", ".jpg", ".png", ".bmp", ".gif", ".tif"}}, _
{"document", New String() {".doc", ".docx", ".txt", ".htm", ".html", ".xml", ".xaml", ".css"}}, _
{"excel", New String() {".xls", ".xlsx", ".xlt", ".xla"}}, _
{"pdf", New String() {".pdf"}}, _
{"zip", New String() {".7z", ".APK", ".BAT", ".rar", ".dll", ".jar", ".zip"}}, _
{"ppt", New String() {".ppt", ".pos", ".pps"}}}

编辑:

如果我喜欢这个

function myFunction() {
       var dic = "<%= dics %>";
       var array_keys = new Array();
       var array_values = new Array();
       for (var key in dic) {
           alert(key);
        }
     }

将警报显示为

我如何在javascript 中访问这个Dictonary 来做一些操作

【问题讨论】:

  • 检查this thread是否给了你尝试的想法
  • 如果字典中存储的值是静态的,那么你可以尝试声明包含这些值的js变量。
  • @Priya:这里的值是静态的,不会动态变化

标签: javascript asp.net vb.net dictionary


【解决方案1】:

现在看来您需要将字典序列化为 javascript 对象,然后将其粘贴到您的 JavaScript 中。您可以使用任何库进行序列化。例如。 Newtosoft.Json。像这样:

function myFunction() {
   var dic = <%= Newtonsoft.Json.JsonConvert.SerializeObject(dics) %>;
   var array_keys = new Array();
   var array_values = new Array();
   for (var key in dic) {
       alert(key);
    }
 }

请注意,我删除了引号。

但我建议您摆脱这种方法,不要混合使用 JavaScript 和 ASP.Net 代码。 所以在我看来,你应该通过 AJAX 加载这本字典,或者如果不可能将 ASP.Net 放在其他地方。例如:

查看:

<input type="hidden" id="dictionaryInput" value="<%=Newtonsoft.Json.JsonConvert.SerializeObject(dics)%> />

JavaScript:

function myFunction() {
   var dicInput = document.getElementById('dictionaryInput');
   var dic = JSON.parse(dicInput.value);
   var array_keys = new Array();
   var array_values = new Array();
   for (var key in dic) {
       alert(key);
    }
 }

希望它会有所帮助。

【讨论】:

  • 这给出了错误:Error 2 'Serialize' is not a member of 'System.Collections.Generic.Dictionary(Of String, String())'
  • 对不起,我刚刚展示了一个解决方案。真正的方法是Newtonsoft.Json.JsonConvert.SerializeObject(dics)。我修正了我的答案以匹配真实的方法
【解决方案2】:

您可以在后面的代码中创建一个属性(例如 DictionaryConv),并在页面加载中设置该属性值。

Dim jsz As New System.Web.Script.Serialization.JavaScriptSerializer
        DictionaryConv = jsz.Serialize(dics)

在javascript中你使用这个函数。

function myFunction() {
            var dic = <%= DictionaryConv%>;
            var array_keys = new Array();
            var array_values = new Array();
            for (var key in dic) {
                alert(key);
            }
        }

【讨论】:

  • 这是 System.Web.Script.Serialization.JavaScriptSerializer .net 中的一个内置类,因此您不需要其他 3rd 方 dll(如 Newton 软件等)。
猜你喜欢
  • 2016-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-30
  • 1970-01-01
  • 2019-12-07
  • 2022-01-15
  • 2021-07-11
相关资源
最近更新 更多