日期:2014-05-19  浏览次数:20693 次

谁能解释一下这个奇怪现象????
test.aspx.cs

  public   string   mystr   =   "我爱你 ";
  private   void   Page_Load(object   sender,   System.EventArgs   e)
    {
      Page.DataBind();
    }
    public   string   GetString()
    {
                  return   (mystr);
    }

test.aspx
<script   language=javascript>
        var   aa;  
        <%   mystr= "我不爱你 "   ;%>
        aa   =   ' ';  
        aa= ' <%#GetString()%> '              
        alert(aa);
       
        aa= ' <%=GetString()%> '              
        alert(aa);

</script>

问题:
<%#GetString()%> ,     <%=GetString()%>   的结果为什么不一样?

如果把Page.DataBind();   注释掉,那么 <%#GetString()%> 得不到结果.
在没有任何数据源的情况下,   Page.DataBind();   绑定了什么呢?




------解决方案--------------------
抢到 沙发! 先顶一下

<%#GetString()%> , 是绑定
<%=GetString()%> 是输出一个结果


------解决方案--------------------
Page_load方法是在页面加载时就执行的,比 <% mystr= "我不爱你 " ;%> 先执行,也就是说在执行这句时已经执行了Page.DataBind(),这里编译器会把该对象的所有属性和方法的返回值的引用绑定到一个集合中.这里面对象的引用是不会变的了...

不巧的是,你这里操作的是string对象,string对象在CLR中是一但创建就不会改变的, <% mystr= "我不爱你 " ;%> 其实mystr已经指向了一个新的引用,而DataBind中的还是以前的引用,所以返回结果不一样~~~~