用户控件内ListBox无法拿到值
用户控件a.ascx里有个ListBox和TextBox,还有可以向ListBox中增加Options的一些控件和代码在a.aspx里放着a.ascx并且有个运行在服务器端的按钮
a.ascx内有这几个方法
public string[]GetValue()
{
string[] strS=null;
ListBox lb=this.listbox;
if(lb.Items.Count!=0)
{
strS = new string[lb.Items.Count];
for(int i=0;i<lb.Items.Count;i++)
{
strS[i] = lb.Items[i].Value;
}
}
return strS;
}
public string GetText()
{
return this.textbox.text;
}
a.aspx上的按钮会去调用上面2个控件内的方法
打开页面后先往Listbox中增加新记录,然后在textbox内输入任意值,按下a.aspx页上的按钮,执行2个取值的方法,发现无法获取listbox的值,因为listbox.Items.Count==0,但是确实在打开页面后已经加过记录了.然后发现获取textbox是有值的,为什么啊???
好急哦,我要获取listbox的值啊...
--------------------编程问答-------------------- 刚刚又发现在按下a.aspx页上的按钮,a.ascx的this.IsPostBack==false
如果=false,那为什么textbox可以取到值呢? --------------------编程问答-------------------- 取clientid试试,不要直接使用控件名称。
---------------------------------------------
EMail:bdbox@163.com 请给我一个与您交流的机会! --------------------编程问答-------------------- 什么意思?
没明白
this.FindControl(this.listbox.ClientID)
是这意思吗?
可返回的是null --------------------编程问答-------------------- 不知道楼主代码是如何写的
我试验了一下 是可以取得的
MyPage.Web.UserControls.a A1 = (MyPage.Web.UserControls.a)this.FindControl("A1");
Response.Write(A1.GetValue()[0]);
Response.Write(A1.GetText()); --------------------编程问答-------------------- //UserControl
<%@ Control Language="c#" AutoEventWireup="false" Codebehind="WebUserControl1.ascx.cs" Inherits="a.WebUserControl1" TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>
<table cellSpacing="0" cellPadding="0" width="200" border="0">
<tr>
<td align="center">未选</td>
<td></td>
<td align="center">已选</td>
</tr>
<tr>
<td><asp:listbox id="LBXleft" runat="server" SelectionMode="Multiple">
<asp:ListItem Value="aaa">aaa</asp:ListItem>
<asp:ListItem Value="bbb">bbb</asp:ListItem>
<asp:ListItem Value="ccc">ccc</asp:ListItem>
</asp:listbox></td>
<td>
<P><input onclick="moveItem('LBXright','LBXleft')" type="button" value=" > " name="btnRight"></P>
<P><input id="btn" onclick="moveItem('LBXleft','LBXright')" type="button" value=" < " name="btnLeft">
</P>
</td>
<td><asp:listbox id="LBXright" runat="server" SelectionMode="Multiple">
<asp:ListItem Value="ddd">ddd</asp:ListItem>
</asp:listbox></td>
</tr>
</table>
<script language="javascript" type="text/javascript">
function moveItem(dest, source)
{
var cs = document.getElementsByTagName("select");
if(typeof dest == "string")
{
for(i=0;i<cs.length;i++)
if(cs[i].id.lastIndexOf(dest)!=-1&&cs[i].id.lastIndexOf(dest)==cs[i].id.length-dest.length)
{ dest=cs[i];break; }
}
if(typeof source == "string")
{
for(i=0;i<cs.length;i++)
if(cs[i].id.lastIndexOf(source)!=-1&&cs[i].id.lastIndexOf(source)==cs[i].id.length-source.length)
{ source=cs[i];break; }
}
for ( index=0; index < source.length; index++ ) {
if ( source[index].selected ) {
dest.length++;
dest[dest.length-1].id = source[index].id;
dest[dest.length-1].value = source[index].value;
dest[dest.length-1].text = source[index].text;
source[index] = null;
index--;
}
}
}
</script>
//usercontrol
namespace a
{
using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
public class WebUserControl1 : System.Web.UI.UserControl
{
protected System.Web.UI.WebControls.ListBox LBXright;
protected System.Web.UI.WebControls.ListBox LBXleft;
private void Page_Load(object sender, System.EventArgs e)
{
this.LBXright.Attributes.Add("ondblclick","moveItem('"+this.LBXleft.ClientID+"',this)");
this.LBXleft.Attributes.Add("ondblclick","moveItem('"+this.LBXright.ClientID+"',this)");
}
public string[] GetRightValue()
{
return this.GetValue(this.LBXright);
}
public string[] GetLeftValue()
{
return this.GetValue(this.LBXleft);
}
private string []GetValue(ListBox lb)
{
string[] strS=null;
if(lb.Items.Count!=0)
{
strS = new string[lb.Items.Count];
for(int i=0;i<lb.Items.Count;i++)
{
strS[i] = lb.Items[i].Value;
}
}
return strS;
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器
/// 修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
//web
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="a.WebForm1" %>
<%@ Register TagPrefix="uc1" TagName="WebUserControl1" Src="WebUserControl1.ascx" %>
<!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">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<asp:Button id="Button1" style="Z-INDEX: 102; LEFT: 232px; POSITION: absolute; TOP: 24px" runat="server"
Text="Get"></asp:Button>
<uc1:WebUserControl1 id="WebUserControl11" runat="server"></uc1:WebUserControl1>
</form>
</body>
</HTML>
//web
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 a
{
/// <summary>
/// WebForm1 的摘要说明。
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.TextBox TxtUserId;
protected System.Web.UI.WebControls.TextBox TxtUserPwd;
protected System.Web.UI.WebControls.Button Button1;
protected WebUserControl1 WebUserControl11;
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)
{
Response.Write("RightListBox=");
string []rightValues = this.WebUserControl11.GetRightValue();
foreach(string one in rightValues)
Response.Write(one+",");
WebUserControl1 c = (WebUserControl1)this.FindControl("WebUserControl11");
Response.Write(c==this.WebUserControl11);
}
}
}
--------------------编程问答-------------------- 那如何在客户端得到用户控件内的listBox对象呢??
补充:.NET技术 , ASP.NET