这个问题老早以前就发现了.但是因为是个小问题.对我的影响不大,所以也没去解决..但是这两天有几个网友在MSN上询问..索性就把解决办法贴出来.给需要的朋友..众所周知,页面在回传后,服务器控件会保存其上次的提交是值.但是用JS在客户端动态添加的值,确在服务器回传后烟消云散.尤其是对于Select联动很不方便.给我们的工作带来了极大的不便.怎么办呢??我的做法是:前台JS赋值后,用一个Hidden保存值,并将Hidden设置runat="server"..后台需要的时候取Hidden的值就好了.这样基本的文本控件取值问题就解决了..但是我测试Select联动的时候,发现始终不能将动态添加的JS脚本设为Selected..最后做了个变通的方法.以下是页面的完整代码:
<% @ Page language = " c# " Codebehind = " WebForm1.aspx.cs " AutoEventWireup = " false " Inherits = " SMS.test.WebForm1 " %> <! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > < HTML > < HEAD > < title > WebForm1 </ title > < meta name ="GENERATOR" Content ="Microsoft Visual Studio .NET 7.1" > < meta name ="CODE_LANGUAGE" Content ="C#" > < meta name ="vs_defaultClientScript" content ="JavaScript" > < meta name ="vs_targetSchema" content ="http://schemas.microsoft.com/intellisense/ie5" > < script language ="javascript" > function add(){ // 填充Select中的值 var myList = document.all.list; myList.options[myList.options.length] = new Option( " 11 " , " 11 " ); myList.options[myList.options.length] = new Option( " 22 " , " 22 " ); myList.options[myList.options.length] = new Option( " 33 " , " 33 " ); } function onchanges(){ // 对Hidden控件赋值 var myc = document.all.list; document.all.hid.value = myc.options[myc.selectedIndex].value; } function sel(){ // 匹配Select中的值,并设置selected var myc = document.all.list; for (i = 0 ; i < myc.options.length;i ++ ){ // 循环匹配值 if (document.all.hid.value == myc.options[i].value){ myc.options[i].selected = true ; break ; } } } </ script > </ HEAD > < body MS_POSITIONING ="GridLayout" > < form id ="Form1" method ="post" runat ="server" > < FONT face ="宋体" > < asp:Button id ="Button1" style ="Z-INDEX: 101; LEFT: 488px; POSITION: absolute; TOP: 392px" runat ="server" Text ="Button" ></ asp:Button > < asp:DropDownList onchange ="onchanges();" id ="list" style ="Z-INDEX: 103; LEFT: 288px; POSITION: absolute; TOP: 200px" runat ="server" > < asp:ListItem Value ="请选择" /> </ asp:DropDownList > < input type ="hidden" value ="" runat ="server" id ="hid" > < asp:Label id ="Label1" title ="aaaaa bbbbb" style ="Z-INDEX: 102; LEFT: 304px; POSITION: absolute; TOP: 392px" runat ="server" > Label </ asp:Label ></ FONT > </ form > < script language =javascript > add(); sel(); </ script > </ body > </ HTML >如果需要在后台引用.就在后台取hidden.value的值就可以了..有兴趣的朋友可以把add()放在<body>的onLoad中看看..就会产生我所说的情况了..
<% @ Page language = " c# " Codebehind = " WebForm1.aspx.cs " AutoEventWireup = " false " Inherits = " SMS.test.WebForm1 " %> <! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > < HTML > < HEAD > < title > WebForm1 </ title > < meta name ="GENERATOR" Content ="Microsoft Visual Studio .NET 7.1" > < meta name ="CODE_LANGUAGE" Content ="C#" > < meta name ="vs_defaultClientScript" content ="JavaScript" > < meta name ="vs_targetSchema" content ="http://schemas.microsoft.com/intellisense/ie5" > < script language ="javascript" > function add(){ // 填充Select中的值 var myList = document.all.list; myList.options[myList.options.length] = new Option( " 11 " , " 11 " ); myList.options[myList.options.length] = new Option( " 22 " , " 22 " ); myList.options[myList.options.length] = new Option( " 33 " , " 33 " ); } function onchanges(){ // 对Hidden控件赋值 var myc = document.all.list; document.all.hid.value = myc.options[myc.selectedIndex].value; } function sel(){ // 匹配Select中的值,并设置selected var myc = document.all.list; for (i = 0 ; i < myc.options.length;i ++ ){ // 循环匹配值 if (document.all.hid.value == myc.options[i].value){ myc.options[i].selected = true ; break ; } } } </ script > </ HEAD > < body MS_POSITIONING ="GridLayout" > < form id ="Form1" method ="post" runat ="server" > < FONT face ="宋体" > < asp:Button id ="Button1" style ="Z-INDEX: 101; LEFT: 488px; POSITION: absolute; TOP: 392px" runat ="server" Text ="Button" ></ asp:Button > < asp:DropDownList onchange ="onchanges();" id ="list" style ="Z-INDEX: 103; LEFT: 288px; POSITION: absolute; TOP: 200px" runat ="server" > < asp:ListItem Value ="请选择" /> </ asp:DropDownList > < input type ="hidden" value ="" runat ="server" id ="hid" > < asp:Label id ="Label1" title ="aaaaa bbbbb" style ="Z-INDEX: 102; LEFT: 304px; POSITION: absolute; TOP: 392px" runat ="server" > Label </ asp:Label ></ FONT > </ form > < script language =javascript > add(); sel(); </ script > </ body > </ HTML >如果需要在后台引用.就在后台取hidden.value的值就可以了..有兴趣的朋友可以把add()放在<body>的onLoad中看看..就会产生我所说的情况了..
<% @ Page language = " c# " Codebehind = " WebForm1.aspx.cs " AutoEventWireup = " false " Inherits = " SMS.test.WebForm1 " %> <! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > < HTML > < HEAD > < title > WebForm1 </ title > < meta name ="GENERATOR" Content ="Microsoft Visual Studio .NET 7.1" > < meta name ="CODE_LANGUAGE" Content ="C#" > < meta name ="vs_defaultClientScript" content ="JavaScript" > < meta name ="vs_targetSchema" content ="http://schemas.microsoft.com/intellisense/ie5" > < script language ="javascript" > function add(){ // 填充Select中的值 var myList = document.all.list; myList.options[myList.options.length] = new Option( " 11 " , " 11 " ); myList.options[myList.options.length] = new Option( " 22 " , " 22 " ); myList.options[myList.options.length] = new Option( " 33 " , " 33 " ); } function onchanges(){ // 对Hidden控件赋值 var myc = document.all.list; document.all.hid.value = myc.options[myc.selectedIndex].value; } function sel(){ // 匹配Select中的值,并设置selected var myc = document.all.list; for (i = 0 ; i < myc.options.length;i ++ ){ // 循环匹配值 if (document.all.hid.value == myc.options[i].value){ myc.options[i].selected = true ; break ; } } } </ script > </ HEAD > < body MS_POSITIONING ="GridLayout" > < form id ="Form1" method ="post" runat ="server" > < FONT face ="宋体" > < asp:Button id ="Button1" style ="Z-INDEX: 101; LEFT: 488px; POSITION: absolute; TOP: 392px" runat ="server" Text ="Button" ></ asp:Button > < asp:DropDownList onchange ="onchanges();" id ="list" style ="Z-INDEX: 103; LEFT: 288px; POSITION: absolute; TOP: 200px" runat ="server" > < asp:ListItem Value ="请选择" /> </ asp:DropDownList > < input type ="hidden" value ="" runat ="server" id ="hid" > < asp:Label id ="Label1" title ="aaaaa bbbbb" style ="Z-INDEX: 102; LEFT: 304px; POSITION: absolute; TOP: 392px" runat ="server" > Label </ asp:Label ></ FONT > </ form > < script language =javascript > add(); sel(); </ script > </ body > </ HTML >如果需要在后台引用.就在后台取hidden.value的值就可以了..有兴趣的朋友可以把add()放在<body>的onLoad中看看..就会产生我所说的情况了..