html的select标签加上runat=server,用js动态添加进项目之后提交,在cs里取不到值
这个该如何处理??<select name="mySelect" multiple id="mySelect"></select><script>
function addOption(strName,strvalue){ 
    var objSelect = document.all.mySelect; 
    // 建立Option对象 
    var objOption = new Option(strName,strvalue); 
    objSelect.options.add(objOption); 

</script>用JS添加多个项目之后,点确定按钮,在CS里输出Response.Write(mySelect.Items.Count);是0怎么办

解决方案 »

  1.   

    1.
    Response.Form2.
    添加一个HiddenField, javascript: addOption, 将选择内容填入HiddenField, 提交时,检查HiddenField.Value
      

  2.   


    放一个隐藏的TextBox控件,不要设置visible=false,要设置style="display:none"
    每次添加一个项目后,将项目总个数保存到文本框中。然后在后台取。
      

  3.   

    <select name="mySelect" runat"server"id="mySelect"> </select> 
    或Request.Form["mySelect"]取值
      

  4.   

    在浏览器上查看服务器端输出的html,你啥时候见过asp.net控件输出runat=server了?因为它毫无用处,浏览器根本不认识这个玩意。在后台使用 this.Request.Form["mySelect"] 就足够了,动态产生的select标签写那个runat=server根本无用。人家在asp.net上使用runat=server,是因为需要很强大的一系列后续开发功能。如果你只是做点底层的html/javascript编写,只要会用Request.Form集合读取提交的数据也就满足了。
      

  5.   

    为什么加上Runat=Server反而倒是不能读取值?因为根本就没有设计过你那种功能。对于HtmlSelect控件来说,当客户端提交值的时候,首先到后台绑定过的Items数据中去寻找提交的值,如果没有匹配的就当客户端什么都没有提交处理,根本不管你“动态添加”的option。
      

  6.   

    或Frm.selectOper.options.length;取值传递给隐藏域名,再取值
      

  7.   

    其实准确地说,当你声明了runat=server的时候(也就是把一个毫无意义的字符串转换为HtmlControl的时候),Request.Form["mySelect"]的写法是有bug的,真正的写法应该是Page.Request.Form[mySelect.UniqueID];只不过很多人看不出来这个bug,因为他接触的页面实在是太简单了。UniqueID才能获得asp.net控件输出到客户端的真实的name值,这个值并不总是跟你声明时的控件id相同(如果你正常地使用asp.net控件,例如模板控件、用户控件等等,就会对客户端输出的命名自动增加一些东西)。类似地,当你声明了runat=server的时候,你写的name="mySelect"就毫无意义了,asp.net会自动产生控件的name属性值,而不管你在设计时怎样声明的。asp.net产生的属性值使用UniqueID来获取。
      

  8.   

    Request.Form是asp.net暴露的最“原始”的功能,它记录asp.net从客户端接收的所有由客户端提交的“名称、值”对。不论这个名称所对应的东西是随便写的字符串(就像楼主第一行代码那样),还是一个asp.net服务器控件(楼主如果给第一行那个东西增加runat=server就成了服务器控件),都在里边。甚至,假设你放一个Button控件,假设ID是Button1,当点击这个案件提交页面的时候,你会发现   Request.Form[Button1.UniqueID]返回的结果竟然也有值。这就是浏览器的特性,当用户点击按钮的时候就会为按钮赋值。
    Request.Form记录了客户端提交的所有“名称、值”对数据,是最原始的数据。如果你的程序非常简单,直接使用Request.Form读取原始的未经处理过的值就够了。特别是,对于那些非asp.net控件,直接这样读取客户端提交的值是最“高级”的功能了。
      

  9.   

    使用 Request.Form["HtmlSelect控件名"] 来获取值如果你必须要在javascript中做这件事情
    使用ajax技术
    你可以使用 js 异步调用 C# 中方法来向服务器HtmlSelect控件增加项目