请教一个简单的问题:
1:我的aspx文件里面有一个
<select name="DGFileUpload1:_ctl1" size="4" style="color:Red;width:310px;">
<option value="都市浪子.doc">都市浪子.doc</option>
<option value="都市浪子.doc">都市浪子.doc</option>
<option value="都市浪子.doc">都市浪子.doc</option>
</select>
我要把他用javascritp函数把它读出来,即一:写出这个javascript函数,一边下步返回一个数组 给服务端。
2:在我的aspx.cs文件里面代码是怎么写的,包括注册和调用,一直写到一个cs里面的一个arrylist类型的数组里面(最主要的也是这个:是怎么读到javascript函数返回的数组然后返回给服务端的)。
1:我的aspx文件里面有一个
<select name="DGFileUpload1:_ctl1" size="4" style="color:Red;width:310px;">
<option value="都市浪子.doc">都市浪子.doc</option>
<option value="都市浪子.doc">都市浪子.doc</option>
<option value="都市浪子.doc">都市浪子.doc</option>
</select>
我要把他用javascritp函数把它读出来,即一:写出这个javascript函数,一边下步返回一个数组 给服务端。
2:在我的aspx.cs文件里面代码是怎么写的,包括注册和调用,一直写到一个cs里面的一个arrylist类型的数组里面(最主要的也是这个:是怎么读到javascript函数返回的数组然后返回给服务端的)。
var aTmp = new Array();
var tmpSel = document.getElementById("selTmp");
for(var i=0; i<tmpSel.length; i++)
{
aTmp[i]=tmpSel.options[tmpSel.seletedIndex].value;
}
window.location="2.aspx?val="+aTmp;
</script>
<select name="DGFileUpload1:_ctl1" id="selTmp" size="4" style="color:Red;width:310px;">
<option value="都市浪子.doc">都市浪子.doc</option>
<option value="都市浪子.doc">都市浪子.doc</option>
<option value="都市浪子.doc">都市浪子.doc</option>
</select>
2.aspx
Array aTmp = new Array();
aTmp = request.querystring("val");
然后通过读取数组内容就可以了
先谢谢你,不过我不想通过连接到一个新页面然后再用传过去的URL参数的方式实现.因为那样回刷新整个页面!
有别的办法吗?
就算用你这个方法也没用啊,因为我是同一个页面的操作.
<iframe name="iframe" id="iframe" width="0" height="0" src="about:blank"><iframe>
<script language="javascript">
var aTmp = new Array();
var tmpSel = document.getElementById("selTmp");
for(var i=0; i<tmpSel.length; i++)
{
aTmp[i]=tmpSel.options[tmpSel.seletedIndex].value;
}
var iframe = document.getElementById("iframe");
iframe.src= "2.aspx?val=" + aTmp;
</script>
2.aspx
Array aTmp;
aTmp = new System.Array[10];
aTmp = Request["val"].Split(',');
for(int i=0; i< aTmp.Length; i++)
{
Response.Write(aTmp.Length);
}
测试了一下,还可以用,你再改改吧
最好把这个选择列表做成服务器端控件
如果不好办,可以在网页上放一个隐藏的服务器端 TextBox, 比如其id为 TextBoxHiddle,可以用这样的方法把值放入 TextBoxHiddle中在后台中放入这样的代码public String TextBoxHiddleClientID
{
get
{
return TextBoxHiddle.ClientID;
}
}前台javascript
<script language="javascript">
var aTmp = new Array();
var tmpSel = document.getElementById("selTmp");
for(var i=0; i<tmpSel.length; i++)
{
aTmp[i]=tmpSel.options[tmpSel.seletedIndex].value;
document.all.<%=TextBoxHiddleClientID%>=document.all.<%=TextBoxHiddleClientID%>+aTmp[i]+";";
}
这样可以把值放入TextBoxHiddle中,后台程序可以用TextBoxHiddle.Text把值取出来,通过分割";"解析
我拿你的测试了一下怎么取不出结果来?
function getData()
{var tmpSel = document.getElementById("DGFileUpload1:_ctl1");
for(var i=0; i<tmpSel.length; i++)
{
tmp=tmpSel.options[i].value;
document.all.<%=TextBoxHiddleClientID%>.value=document.all.<%=TextBoxHiddleClientID%>.value+tmp+";";
}
}
</script>
charles_y(难得糊涂) 就是遍历所有的。提交的都是你选择的,要提交你所有的,必须用<input type=hidden name=x>传递
十分简单http://www.caae.com.cn/hdt
to:charles_y(难得糊涂):
我老取不到值,你是否可以把你的文件发给我?包括aspx和cs文件
我的油箱:[email protected]
<%@ Page language="c#" Codebehind="PassDataToBack.aspx.cs" AutoEventWireup="false" Inherits="WebTest.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<TITLE>WebForm1</TITLE>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
<script language="javascript">
function getData()
{var tmpSel = document.getElementById("DGFileUpload1:_ctl1");
for(var i=0; i<tmpSel.length; i++)
{
tmp=tmpSel.options[i].value;
document.all.<%=TextBoxHiddleClientID%>.value=document.all.<%=TextBoxHiddleClientID%>.value+tmp+";";
}
}
</script>
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<FONT face="宋体">
<select style="Z-INDEX: 101; LEFT: 48px; WIDTH: 310px; COLOR: red; POSITION: absolute; TOP: 104px"
size="4" name="DGFileUpload1:_ctl1">
<OPTION value="都市浪子.doc">都市浪子.doc</OPTION>
<OPTION value="都市浪子.doc">都市浪子.doc</OPTION>
<OPTION value="都市浪子.doc">都市浪子.doc</OPTION>
</select></FONT>
<asp:textbox id="TextBoxHiddle" style="Z-INDEX: 102; LEFT: 48px; POSITION: absolute; TOP: 200px"
runat="server" Width="329px"></asp:textbox><asp:button id="Button1" style="Z-INDEX: 103; LEFT: 64px; POSITION: absolute; TOP: 296px" runat="server"
Width="152px" Text="这个是服务器端按钮" Height="40px"></asp:button><INPUT style="Z-INDEX: 104; LEFT: 64px; WIDTH: 136px; POSITION: absolute; TOP: 248px; HEIGHT: 24px"
type="button" onclick="getData()" value="把值存到TextBox中">
</form>
</SCRIPT>
</body>
</HTML>
后台文件
PassDataToBack.aspx.cs
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;namespace WebTest
{
/// <summary>
/// WebForm1 的摘要说明。
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.WebControls.TextBox TextBoxHiddle;
public String TextBoxHiddleClientID
{
get
{
return TextBoxHiddle.ClientID;
}
} private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion private void Button1_Click(object sender, System.EventArgs e)
{
string testString=TextBoxHiddle.Text;
}
}
}
其中的document.all.<%=TextBoxHiddleClientID%>.value=document.all.<%=TextBoxHiddleClientID%>.value+tmp+";";
改为
document.all.TextBoxHiddle.value=document.all.TextBoxHiddle.value+tmp+";";
也可以
这个可以说跟服务器端根本就没有什么关系。