获取代码隐藏值时出现Javascript错误

时间:2009-07-07 12:20:12

标签: c# asp.net javascript

我在facebook平台发布了一个网站,我正在使用C#.Net 2008,问题是我在javascript arary中加载了代码背后的数组元素,我使用以下javascript代码加载elelment元素:< / p>

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中调用函数,并且没有输入函数,这是问题所以任何人都可以帮助我

希望我能找到解决方案,因为我感到沮丧

3 个答案:

答案 0 :(得分:1)

您需要正确地转义值:

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

答案 1 :(得分:0)

在后面的代码中生成这个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);
}

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

答案 2 :(得分:0)

.NET是否在<script>块内呈现aspx标记时出现问题?

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