前端大概是这样
<script type="text/javascript" language="javascript">
 function append_child(listID) {
  var list = document.getElementById(listID);
  var li = document.createElement("li");
  li.innerHTML = '<div>hello world</div>';
  list.appendChild(li);
 }
</script>
<ul id="list" runat="server"></ul>
<input type="button" onclick="append_child('<%=list.ClientID %>');" value="添加" /><br />
<asp:Button ID="Button1" runat="server" Text="确认提交" onclick="Button1_Click" />多点几下"添加"按钮,浏览器端正常工作,但提交后在Button1_Click方法内,list对应的innerHTML却是"",求解

解决方案 »

  1.   

    li标记不是表单控件,是不会发送到服务器端的。
    你必须放在隐藏表单控件如<input type=hidden name=x>里面才能提交到服务器端
      

  2.   


    不是很明白,比如<textarea runat="server" id="ta"></textarea>
    提交后服务器端ta的内容就变了
    如果要改的话,应该怎么办呢
      

  3.   


    这是服务器控件 HtmlTextArea。你可以看看msdn,知道这是什么。
      

  4.   

    当你写<ul id="list" runat="server"></ul>
    <input type="button" onclick="append_child('<%=list.ClientID %>');" value="添加" /><br />
    <asp:Button ID="Button1" runat="server" Text="确认提交" onclick="Button1_Click" />
    前两行被asp.net解析为服务器控件LiteralControl,其Text属性是这两行字符串。然后第三行被解析为Button控件。也就是说这是两个服务器控件。其中第一个只是字符串而已,就算你胡乱写也一样。有些人把这叫做什么“html控件”,他是分不清楚什么是浏览器端html标签,什么是服务器控件,说了一个四不像的概念。
      

  5.   

    sorry!没有注意第一个写了runat="server"。
    那么这应该被asp.net解析为三个服务器控件,第一个大概是一个 HtmlGenericControl 类型的控件,然后是一个 LiteralControl 控件,然后是一个Button控件。asp.net要多设计页面上每一行都解析为服务器控件,然后才进行页面操作,例如Render而输出html。其中对于你随便写字符串,例如就算你把 <input ....>胡乱写成了<inputa ....>它也在LiteralControl控件中原样输出,当作普通的字符串处理。这种东西没有什么内涵,你也别想着像其它服务器控件一样有让你编程省事的(例如可以得到InnerXXXX属性的)设计内涵。