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(); 绑定了什么呢?

解决方案 »

  1.   

    抢到 沙发! 先顶一下 <%#GetString()%>,  是绑定
    <%=GetString()%>   是输出一个结果
      

  2.   

    如果是这样调用, 即在第二alert之前再绑定一次, 那么就是 不管是绑定方式还是函数方式都返回 "我不爱你"了. 所以关键问题还是Page.DataBound()到底是怎么回事.<script language=javascript>
            var aa; 
            <% mystr="我不爱你" ;%>
            aa = ''; 
            aa='<%=mystr%>';
            alert(aa);
            
            <% Page.DataBind(); %>
            aa='<%#mystr%>';
            alert(aa);
        </script>
      

  3.   

    ----如果把Page.DataBind(); 注释掉,那么<%#GetString()%>得不到结果.就相当于你 把 DataGrid 的
    dataGrid1.DataBind();  去掉 也看不到结果一样 ---在没有任何数据源的情况下, Page.DataBind(); 绑定了什么呢?它是有数据源的
    public string GetString()
      {
             return (mystr);
      }
      

  4.   

    QH_HQ(非正派) 别老是强沙发啊, 你有没有仔细看看他们的结果不同啊,能给个解释不.
      

  5.   

    通常情况下DataBind() 是把数据源和控件绑定, 在控件定义里面能看到绑定的对应关系,
    可是在Page里面没有数据源的情况下绑定到底是怎么绑定的呢??
      

  6.   

    Page_load方法是在页面加载时就执行的,比<% mystr="我不爱你" ;%>先执行,也就是说在执行这句时已经执行了Page.DataBind(),这里编译器会把该对象的所有属性和方法的返回值的引用绑定到一个集合中.这里面对象的引用是不会变的了...不巧的是,你这里操作的是string对象,string对象在CLR中是一但创建就不会改变的,<% mystr="我不爱你" ;%>其实mystr已经指向了一个新的引用,而DataBind中的还是以前的引用,所以返回结果不一样~~~~
      

  7.   

    我查了一下文档,好像说明比较模糊, 如果我没有理解错的话, 一旦DataBind()后, 页面里面的public对象都放到一个集合中去了, 所以这个时候就有两套值, 一个和集合中的,一套是page object中的成员实例. 函数表达式得到的是对象成员的值, 而绑定方式是绑定集合中返回的值.it_mpf(请不要挑战我的耐心!) , QH_HQ(非正派) 两位帮我确认一下这样理解对不对?一直做底层的动动, 刚刚接触这些高层的东西,很不适应,麻烦各位了, 谢 !
      

  8.   

    而绑定方式是绑定集合中返回的值.
    ======================================应该说是绑定的集合里存的是绑定时返回的引用,你可以试下把你的string改成其它的类试试,只要引用不变,你的操作会影响你绑定的结果
      

  9.   

    it_mpf(请不要挑战我的耐心!)  我用StringBuilder类试过了啊, 绑定的结果不会改变, 看了绑定集合里面保存的是对象的copy, 不是引用啊.
      

  10.   

    <script language=javascript>
        var aa; 
        <% mystr="我不爱你" ;%>
        aa = '';
         
        aa='<%=mystr%>'       
        alert(aa); //我不爱你
        
        aa='<%#mystr%>' ------------绑定      
        alert(aa);// 我爱你
        
        aa='<%#GetString()%>' ---------- 绑定 
        alert(aa);//我爱你
        
         <% Page.DataBind(); %>// 不能这样写,即使注释掉也不行
         
        aa='<%=mystr%>'       
        alert(aa);//我不爱你     aa='<%#mystr%>'  ------------- 绑定    
        alert(aa);//我爱你
           aa='<%=GetString()%>'    //   这样写是错的..注释掉也没有用
        alert(aa);//
       
      不管他们的位置 如何变化  绑定之后的值 和没有绑定的值 输出结果是不一样的
      绑定的值 来自页面初始化 .没有绑定的值 来自javaScript 函数
      
      Page.DataBing() 对页面进行绑定.就会 查找页面中所有含有 '<%# %> 符号的表达式,并对他赋值</script>
      

  11.   

    <% Page.DataBind(); %> 是有效果的啊, 重新绑定一下嘛 mystr的值更新了,你再仔细试试看
      

  12.   

    QH_HQ(非正派) ,
     我试了你的代码 结果和你标注的不一样, 你自己试试.
      

  13.   

    你的代码,最后三个alert全是 我不爱你 , 你测试一下, 好像 <% Page.DataBind(); %>这个去掉和不去掉结果都一样, 郁闷
      

  14.   

    var aa; 
        <% mystr="我不爱你" ;%>
        aa = '';
         
        aa='<%=mystr%>'       
        alert(aa); //我不爱你
        
        aa='<%#mystr%>'
        alert(aa);// 我爱你
        
        aa='<%#GetString()%>'   
      alert(aa);//我爱你
            
        aa='<%=mystr%>'       
        alert(aa);//我不爱你     aa='<%#mystr%>'   
       alert(aa);//我爱你
    =================================
    好好 运行 这几行 代码  结果 就是这个了  你再试试 ...
      

  15.   

    这个不用试也能看出来是这个结果啊, 我不是让你把 <% Page.DataBind(); %> 加在最后一个  aa='<%#mystr%>'   之前再试试的嘛.那就结果不一样了, 重新绑定了.
      

  16.   

    <% Page.DataBind(); %> 随你 加载 哪个地方 都有 语法 错误!
    你没有 发现 后面的语句都不能 执行了码