【问题标题】:Javascript error in getting code behind values获取值背后的代码时出现 Javascript 错误
【发布时间】:2009-07-07 12:20:11
【问题描述】:

我有一个在 facebook 平台上发布的网站,我正在使用 C# .Net 2008,问题是我正在从 javascript arary 后面的代码中加载数组元素,并且我正在使用以下 javascript 代码加载元素元素:

ArList = new Array('<%=ListOfWords[0]%>','<%=ListOfWords[1]%>','<%=ListOfWords[2]%>','<%=ListOfWords[2]%>');

当我从数组中调用一个元素时的问题如下:

document.getElementById("WordDiv").innerHTML = ArList [0];

尽管后面代码中的数组有值,但该元素没有设置值,我不知道为什么没有设置数组元素的值?在某些情况下,我发现它加载了值并且一切正常,所以可能是渲染中的问题,所以在客户端看不到后面的代码值?或者问题出在哪里? 当我在 IE 中跟踪应用程序时,我发现状态栏报告一个 javascript 错误然后消失并说完成,当黄色警报出现在状态栏中时,我点击它并注意到消息说:预期对象。

现在的问题是,在 body 标记的 onload 事件中,我调用了 javascript 中的一个函数,该函数使用数组后面的代码中的值初始化 javascript 数组,问题是在某些情况下,当我跟踪它时没有输入该函数通过在函数的开头放置一个警报,我发现当 javascript 数组未填充时,由于未显示警报,因此未输入函数的代码,所以我不知道如何强制 DOM 进入此函数我在代码示例的标记中称之为: javascript代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     <html xmlns="http://www.w3.org/1999/xhtml">
     <head runat="server">         
     </head>
     <body onload="IntializeArr(); return false;">
     <form id="form1" runat="server" >
     ..........Some Controls...............
    </form>
    <script type="text/javascript" language="javascript"> 
    var TList;
    var BList;
       function IntializeArr()
     {       
        TList = new Array('<%=ListofT[0]%>','<%=ListofT[1]%>','<%=ListofT[2]%>','<%=ListofT[3]%>','<%=ListofT[4]%>','<%=ListofT[5]%>','<%=ListofT[6]%>','<%=ListofT[7]%>','<%=ListofT[8]%>','<%=ListofT[9]%>');
        BList = new Array('<%=ListOfB[0]%>','<%=ListOfB[1]%>','<%=ListOfB[2]%>','<%=ListOfB[3]%>','<%=ListOfB[4]%>','<%=ListOfB[5]%>','<%=ListOfB[6]%>','<%=ListOfB[7]%>','<%=ListOfB[8]%>','<%=ListOfB[9]%>');        
     }
    </script>
    </body>
    </html>

C# 代码:

public string[] ListOfB = new string[15];
public string[] ListofT = new string[15];

数组后面的代码是从数据库返回的数据中填充的,它们已填充,我已经跟踪它们,每次它们都已填充,我发现问题来自 javascript,我不知道是来自 facebook 平台还是来自我的代码,但我认为这不是来自我的代码,因为我在标签的 onload 中调用了一个函数并且没有输入该函数,这是问题所以任何人都可以帮助我

希望我能找到解决办法,因为我很沮丧

【问题讨论】:

  • 所以我可以让人们注意这个问题,因为过去的帖子没有得到任何关注,也没有有用的答案,而且这个论坛有一个很大的问题是根据最近发布的问题显示的问题不是到最近的回复
  • 这不是论坛,没有人有义务在 20 分钟内回答您的问题。
  • 好的,谢谢你的回复,我不需要你的任何解决方案,你礼貌的演讲就足够了,谢谢

标签: c# asp.net javascript


【解决方案1】:

您需要正确转义这些值:

TList = new Array("<%=Server.HTMLEncode(ListofT[0]%>)", ...);

【讨论】:

  • 非常感谢你,我很高兴这个回答对我帮助太大了,我太感谢你了,我需要你的说明,为什么你的代码解决了这个问题?为什么 Server.HTMLEncode 这样做?我希望你能回复,因为这将有助于我将来理解很多事情,非常感谢
  • 假设例如 ListofT[0] = "abc\"abc"; 这意味着您将得到以下标记: TList = new Array("abc"abc", ... ) 这是一个无效的 javascript,你会得到一个错误。 Server.HTMLEncode 将 " 转换为 " ,因此您最终得到 TList = new Array("abc"abc", ...) 现在是一个有效的 javascript。
【解决方案2】:

.NET 在 &lt;script&gt; 块内渲染 aspx 标记是否存在问题?

在 HTML 中呈现的值是否正确?如果没有,你应该尝试用另一种方式渲染整个 JS 脚本块。

【讨论】:

  • 在
【解决方案3】:

在你的代码后面生成这个javascript代码然后调用 Page.RegisterStartupScript() 不是更容易吗? 这样可以确保您拥有正确的数组,并且可以在 javascript 代码中使用更少的 aspx 标签。

public string ArrayToJsArray(string[] array)
{
    StringBuilder s = new StringBuilder();
    foreach (var item in array)
    {
        s.Append("'" + Server.HTMLEncode(item) + "',");
    }
    s.Remove(s.Length-1, 1);
}

public void main(){
    string script = "<script type=\"text/javascript\">";
    script += "var TList = new Array(" + ArrayToJsArray(TListArray) + ");";
    script += "var BList = new Array(" + ArrayToJsArray(BListArray) + ");";
    script += "</script>";
    Page.RegisterClientScriptBlock("key", script);
}

试试上面的代码,原谅我,因为我没有自己运行它,所以它可能包含错误,但我认为这个想法很清楚。

【讨论】:

  • 我已经尝试过 Page.RegisterArrayDeclaration() 并且没有进行任何修改,并且仍然没有从 javascript 中看到数组我已经考虑过这个解决方案,但我不知道是什么问题,因为银标签代码不是从 javascript 代码中看到,有时它运行良好并获取数据,有时发生 javascript 错误并且看不到数组值
  • 你的意思是我把所有的脚本代码都放在字符串后面的代码中并注册了吗?我不明白该怎么做?或者你的意思是注册数组?我的javascript代码比我在帖子中写的要多并注册它,所以我将获得每个函数和公共变量并将其放在后面的代码中以传递给注册 javscript 代码的函数?请澄清你的意思,谢谢
  • 我提供了一些代码来解释我的意思。您创建 javascript 代码来初始化数组,然后使用 registerclientscriptblock 将它们发布到页面。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-17
  • 2021-07-24
  • 2021-04-21
  • 1970-01-01
相关资源
最近更新 更多