这个问题老早以前就发现了.但是因为是个小问题.对我的影响不大,所以也没去解决..但是这两天有几个网友在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 >
<! 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 >
<! 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 >
<! 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中看看..就会产生我所说的情况了..