Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取代码隐藏值时发生Javascript错误_C#_Asp.net_Javascript - Fatal编程技术网

C# 获取代码隐藏值时发生Javascript错误

C# 获取代码隐藏值时发生Javascript错误,c#,asp.net,javascript,C#,Asp.net,Javascript,我在facebook平台上发布了一个网站,我使用的是C#.Net 2008,问题是我正在从javascript arary中的代码中加载数组元素,我正在使用以下javascript代码加载elelment元素: ArList = new Array('<%=ListOfWords[0]%>','<%=ListOfWords[1]%>','<%=ListOfWords[2]%>','<%=ListOfWords[2]%>'); 元素没有设置值,尽管

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

ArList = new Array('<%=ListOfWords[0]%>','<%=ListOfWords[1]%>','<%=ListOfWords[2]%>','<%=ListOfWords[2]%>');
元素没有设置值,尽管代码隐藏中的数组有值,但我不知道为什么数组元素的值没有设置?在某些情况下,我发现它加载了值,并且一切正常,所以它可能是渲染中的一个问题,所以在客户端看不到代码背后的值?或者问题出在哪里? 当我在IE中跟踪应用程序时,我发现状态栏报告一个javascript错误,然后消失并说“完成”。当黄色allert出现在状态栏中时,我单击了它,并注意到消息说:预期对象

现在的问题是,在body标记的onload事件中,我在javascript中调用了一个函数,该函数使用codebhind数组中的值初始化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>
数组后面的代码是由数据库返回的数据填充的,它们被填充了,我跟踪了它们,每次都被填充了,我发现javascript的问题,我不知道是来自facebook平台还是来自我的代码,但我认为这不是源于我的代码,因为我在加载标签和功能未输入,这是问题所在,任何人可以帮助我吗


希望我能在沮丧时找到解决方案,在代码隐藏中生成此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);
}
公共字符串ArrayToJsArray(字符串[]数组)
{
StringBuilder s=新的StringBuilder();
foreach(数组中的变量项)
{
s、 追加(“'”+Server.HTMLEncode(item)+“,”);
}
s、 移除(s.长度-1,1);
}
公共图书馆{
字符串脚本=”;
脚本+=“var TList=新数组(“+ArrayToJsArray(TListArray)+”);
脚本+=“var BList=新数组(“+ArrayToJsArray(BListArray)+”);
脚本+=“”;
第页:RegisterClientScriptBlock(“键”,脚本);
}

请尝试上面的代码,请原谅我,因为我自己没有运行它,所以它可能包含bug,但我想这一点很清楚。在
块中呈现aspx标记时.NET没有问题吗


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

您需要正确地转义这些值:

TList = new Array("<%=Server.HTMLEncode(ListofT[0]%>)", ...);
TList=新数组(“)”,…);

我尝试了Page.registerArraydeClauration()没有任何修改,仍然是javascript中没有看到的数组我考虑过这个解决方案,但我不知道问题出在哪里,因为银标签代码没有从javascript代码中看到,有时它工作正常,获得了数据,而在其他时间发生javascript错误,没有看到数组值。你是说我把所有的脚本代码中的字符串在代码后面并注册吗?我不知道该怎么做?或者你的意思是注册数组?我的javascript代码比我在文章中写的要多,我要注册它,所以我将获得每个函数和公共变量,并将其放在后面的代码中,以传递给注册javscript代码的函数?请澄清你的意思,谢谢。我提供了一些代码来解释我的意思。创建javascript代码来初始化数组,然后使用registerclientscriptblock将它们发布到页面。在块中呈现aspx标记意味着什么?在HTML中呈现的值是否正确?javascript代码获得了数组值背后的代码,在某些情况下运行良好,而在其他情况下,对数组值背后的代码感觉不好,没有输入javascript函数,javascript代码中出现错误。Dublicate:那么,我能让人们注意到什么问题,因为过去的帖子没有得到任何注意,也没有任何帮助回答,这个论坛有一个大问题,问题是根据最近的帖子显示的,而不是最近的回复。这不是一个论坛,没有人有义务在20分钟内回答你的问题。好的,谢谢你的回答,我不需要任何解决方案。你的礼貌发言就足够了。谢谢你,非常感谢,我很高兴这个回答对我帮助太多。我太感谢你了,我需要你给我一个例子,说明你的代码为什么解决了这个问题?为什么Server.HTMLEncode会这样做?我希望你能回复,因为这将有助于我将来理解很多东西,并且非常感谢您的支持,例如ListSoft[0]=“abc\”abc;这意味着您将得到以下标记:TList=new Array(“abc”abc),…),这是一个无效的javascript,您将得到一个错误。Server.HTMLEncode将“转换为”,因此最终得到TList=new数组(“abc”abc“,…),它现在是一个有效的javascript。
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);
}
TList = new Array("<%=Server.HTMLEncode(ListofT[0]%>)", ...);