在.aspx文件中:引用了两个.js文件如下:
<HEAD>
<title>view</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta content="JavaScript" name="vs_defaultClientScript">
<LINK href="../linker/CSS/FONT.css" type="text/css" rel="stylesheet">
<script type="text/javascript" src="walterzorn.js"></script>
<script type="text/javascript" src="wz_jsgraphics.js"></script>
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
在.cs中,需要动态写入<script>语句:
private void writeScript()
{
string str="";
str="<script type='text/javascript'>"
+"<!--"
+"var jg2=new jsGraphics('Rect');"
+"var jg3 = new jsGraphics('Rect');"
+"jg2.setColor('#50db70');"
+"jg2.setStroke(4);"
+"jg3.setColor('#1570a5');"
+"jg3.setFont('verdana,geneva,sans-serif', '12px', Font.BOLD);"
+"jg2.drawRect(0,0,700,500);"
+"function draw(){"
+"var width=80;var lenth=100;var loop = 0;"
+"while (loop < lenth+1){"
+"jg3.drawString(loop+'X',loop*700/lenth,-10); if(loop<width){"
+"jg3.drawString(loop+'Y',-35,loop*700/lenth);}"
+"loop=loop+10;}";
str=str +"drawRect(0,0,100,40);"
+"jg3.drawString('一区', 50, 20);"
+"jg2.drawRect(0,100,100,40);"
+"jg3.drawString('二区', 50, 120);"
+"jg2.drawRect(120,0,80,40);"
+"jg3.drawString('三区', 160, 20);"
+"jg2.drawRect(120,100,80,40);"
+"jg3.drawString('四区', 160, 120);";
str=str+"jg3.paint();"
+"//-->"
+"</script>";

Response.Write(str);
           
}
其中:
var jg2=new jsGraphics('Rect');
var jg3 = new jsGraphics('Rect');
是对.js文件中的引用。我是在Page_Load方法中调用上面的方法,写入<script>语句的,问题是:
默认的情况下,动态写入的入<script>语句在整个.aspx页面代码的最前面,这个时候,动态加入的<script>语句中需要调用的.JS的内容还没有引用进来,因此<script>语句报错。
请问怎么样来解决这个问题~~急救啊

解决方案 »

  1.   

    再来看看动态加载一些script 
    一般来说有三种情况 
    (1)在前台放置<asp:Literal Runat="server"></asp:Literal>指定位置输出 
    (2)后台通过RegisterStartupScript和RegisterClientScriptBlock输出 
    (3)Response.Write输出 
    举例如下 
    (1) 
    前台 
    <asp:Literal ID="myLiteral" Runat="server"></asp:Literal> 
    后台 
    this.myLiteral.Text+="<script>alert('test');</script>"; 
    查看源代码可以看到原来的 
    <asp:Literal ID="myLiteral" Runat="server"></asp:Literal> 
    位置变成了 
    <script>alert('test');</script> 
    (2) 
    为了更加清楚看到两个的区别,前台如下 
    <form id="Form1" method="post" runat="server"> 
    <input type="hidden" value="test" id="myhiden"> 
    </form> 
    后台如下 
    Page.RegisterStartupScript("","<script>alert('RegisterStartupScript:'+document.all.myhiden.value)</script>"); 
    Page.RegisterClientScriptBlock("","<script>alert('RegisterClientScriptBlock:'+document.all.myhiden.value)</script>"); 
    结果如下:只出现对话框显示RegisterStartupScript:test 
    查看源代码如下: 
    <form name="Form1" method="post" action="WebForm4.aspx" id="Form1"> 
    <input type="hidden" name="__VIEWSTATE" value="dDwtNjU0MzcyMTk1Ozs+NmbLf6dWkF/Q/FLKKsdPPfhFXr0=" /> 
    <script>alert('RegisterClientScriptBlock:'+document.all.myhiden.value)</script> 
    <input type="hidden" value="test" id="myhiden"> 
    <script>alert('RegisterStartupScript:'+document.all.myhiden.value)</script> 
    </form> 
    两者区别不用多说了吧 
    (3) 
    我们再加一句Response.Write("test") 
    查看源代码发现test字样出现在最前面 
    test 
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > 
    用它来输出转向代码比较合适 
    <script>location.href='page.aspx'</script> 最后在提醒一下大家,有很多人在给一个控件加js代码的时候会这么写: 
    this.mybody.Attributes["onclick"]="<script>alert('test');</script>"; 
    这么写是不对的 
    应该是 
    this.mybody.Attributes["onclick"]="alert('test');"; 
    比如你在前台书写<a onclick=>的时候你会写<a onclick='<script>alert('test')<script>'>吗? 
    道理是一样的! 
    但是相反,有的人在 
    Page.RegisterStartupScript("","<script>alert('test');</script>");的时候不写里面的<script>也是不行的 
    (虽然名字叫Register...Script) 
      

  2.   

    再来看看动态加载一些script 
    一般来说有三种情况 
    (1)在前台放置<asp:Literal Runat="server"></asp:Literal>指定位置输出 
    (2)后台通过RegisterStartupScript和RegisterClientScriptBlock输出 
    (3)Response.Write输出 
    举例如下 
    (1) 
    前台 
    <asp:Literal ID="myLiteral" Runat="server"></asp:Literal> 
    后台 
    this.myLiteral.Text+="<script>alert('test');</script>"; 
    查看源代码可以看到原来的 
    <asp:Literal ID="myLiteral" Runat="server"></asp:Literal> 
    位置变成了 
    <script>alert('test');</script> 
    (2) 
    为了更加清楚看到两个的区别,前台如下 
    <form id="Form1" method="post" runat="server"> 
    <input type="hidden" value="test" id="myhiden"> 
    </form> 
    后台如下 
    Page.RegisterStartupScript("","<script>alert('RegisterStartupScript:'+document.all.myhiden.value)</script>"); 
    Page.RegisterClientScriptBlock("","<script>alert('RegisterClientScriptBlock:'+document.all.myhiden.value)</script>"); 
    结果如下:只出现对话框显示RegisterStartupScript:test 
    查看源代码如下: 
    <form name="Form1" method="post" action="WebForm4.aspx" id="Form1"> 
    <input type="hidden" name="__VIEWSTATE" value="dDwtNjU0MzcyMTk1Ozs+NmbLf6dWkF/Q/FLKKsdPPfhFXr0=" /> 
    <script>alert('RegisterClientScriptBlock:'+document.all.myhiden.value)</script> 
    <input type="hidden" value="test" id="myhiden"> 
    <script>alert('RegisterStartupScript:'+document.all.myhiden.value)</script> 
    </form> 
    两者区别不用多说了吧 
    (3) 
    我们再加一句Response.Write("test") 
    查看源代码发现test字样出现在最前面 
    test 
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > 
    用它来输出转向代码比较合适 
    <script>location.href='page.aspx'</script> 最后在提醒一下大家,有很多人在给一个控件加js代码的时候会这么写: 
    this.mybody.Attributes["onclick"]="<script>alert('test');</script>"; 
    这么写是不对的 
    应该是 
    this.mybody.Attributes["onclick"]="alert('test');"; 
    比如你在前台书写<a onclick=>的时候你会写<a onclick='<script>alert('test')<script>'>吗? 
    道理是一样的! 
    但是相反,有的人在 
    Page.RegisterStartupScript("","<script>alert('test');</script>");的时候不写里面的<script>也是不行的 
    (虽然名字叫Register...Script) 
      

  3.   

    把str改成protected string的类成员,然后在Aspx页面适当的地方加上
    <%=str%>
      

  4.   

    最简单的办法,在页面放一个Label,然后,在后台这样;
    this.Label1.Text = "你的脚本";此法经过验证,没有问题,当然楼上的办法也可以.
      

  5.   

    this.Label1.Text = "你的脚本";同意!还可以设Visible,呵,很爽!