<head runat="server">
    <title></title>
<script type="text/javascript" language="javascript">   function chkInAccount(source, args){  
    var out=document.getElementById('<%= ddlOutAccount.ClientID %>');
}这是部分代码片段。但我运行这个页面的话直接报错,连后台都不进。
错误如下:控件包含代码块(即 <% ... %>),因此无法修改控件集合。 解决方法已经找到了
1。<div runat="server" id="div1"> 放在这样的一个div里
2.<%= ddlOutAccount.ClientID %>改成<%# ddlOutAccount.ClientID %>我想请教的是,为什么=的表达式会报错,而#的就不会呢? 他们不是都是从服务器端读取数据么?

解决方案 »

  1.   

    <%= %> 是赋值表达式
    <%# %> 是数据绑定表达式,其中的格式为:
    <%# DataBinder.Eval(Container.DataItem,"UserName") %> 其中UserName是要绑定的字段名。
      

  2.   

    你可以把这些javascript放到<body />中。
      

  3.   

    <%= %> 是赋值表达式
    <%# %> 是数据绑定表达式<head runat="server">
    <title></title>
    这是部分代码片段。但我运行这个页面的话直接报错,连后台都不进。
    错误如下:控件包含代码块(即 <% ... %>),因此无法修改控件集合。 是因为你在代码中,修改header控件的值,比如说动态增加了一个meta,js,css的元素,所以会报错
    一般解决就是把<%=获取服务端变量,调用服务端的方法,放到head下面去
    如:<head runat="server">
    <title></title>
    </head>
    <script type="text/javascript" language="javascript"> function chkInAccount(source, args){ 
    var out=document.getElementById('<%= ddlOutAccount.ClientID %>');
    }
      

  4.   

    各位误解我的意思了,我再补充一下:
    我想请教的是,为什么=的表达式会报错,而#的就不会呢? 他们不是都是从服务器端读取数据么?
    而不是问,什么是<%= %> 什么是<%# %>。也不是问如何解决报错问题。而是问为什么<%= %>会报错而<%# %>不报错
      

  5.   

    关于修改成“#”就成的问题,虽然你没有提供更多线索很难判断,不过可能你使用了某些自动对<head runat="server">进行修改绑定的处理机制,而它又有bug。不信你删除runat="server“试试看。
      

  6.   


    ddlOutAccount.ClientID 这个本身就是一个变量,即数据绑定;
    ----------------------------------
    <%= ddlOutAccount.ClientID %>,这样写的话是错的,因为<%= %> 是赋值表达式,不能用于数据绑定。
      

  7.   

    可以说这个ddlOutAccount.ClientID值有很多个,比如ClientID=1,ClientID=2,
    而<%= %> 赋值,只能有一个值。
      

  8.   


    <%--使用<% %>的语法。并不返回一个字符串,它是直接把结果内容写入到输出流中。
    如果是采用<%= %>的表达式的语法,Asp.net会计算该表达式的值,并把值的字符串结果直接在原位置输出。
    而<%# %> 是数据绑定表达式
    --%>
    供参考
      

  9.   

    <%= %> 是赋值表达式
    <%# %> 是数据绑定表达式,
      

  10.   

    多谢你的回答,但还有个问题,当我把JS代码放进DIV里 DIV加上runat=“server”就正确了,这该如何解释啊