aspx:
@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm5.aspx.cs" Inherits="WebApp.WebForm5" %><%@ Register src="WebUserControl1.ascx" tagname="WebUserControl1" tagprefix="uc1" %>
<%@ Register src="WebUserControl2.ascx" tagname="WebUserControl2" tagprefix="uc2" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div >
<asp:Panel ID="Panel1" runat="server">
</asp:Panel>
</div>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="显示1" />
<asp:Button ID="Button2" runat="server" Text="显示2" onclick="Button2_Click" />
<asp:Button ID="Button3" runat="server" onclick="Button3_Click"
Text="用户控件里按钮的Text" />
</form>
</body>
</html>
-----------------------------------------------------------------------------------------------------
cs:
protected void Page_Load(object sender, EventArgs e)
{ if (!Page.IsPostBack)
{
Session["cname"] = "WebUserControl1.ascx";
}
addcontrol(); } protected void Button1_Click(object sender, EventArgs e)
{
Session["cname"] = "WebUserControl1.ascx";
addcontrol(); } protected void Button2_Click(object sender, EventArgs e)
{
Session["cname"] = "WebUserControl2.ascx";
addcontrol();
} void addcontrol()
{
Control uc = LoadControl(Session["cname"].ToString());
Panel1.Controls.Clear();
Panel1.Controls.Add(uc); } protected void Button3_Click(object sender, EventArgs e)
{
Response.Write((Panel1.Controls[0].Controls[0] as Button).Text);
}
--------------------------------------------------------------------------------------
WebUserControl1.ascx
html:<asp:Button ID="Button1" runat="server" Text="b1" onclick="Button1_Click"
Width="158px" />cs:protected void Page_Load(object sender, EventArgs e)
{
Button1.Text = "第一个:1"; } protected void Button1_Click(object sender, EventArgs e)
{
Button1.Text = "第一个:2";
}
-----------------------------------------------------------------------------------------WebUserControl2.ascx
html:
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />cs: protected void Page_Load(object sender, EventArgs e)
{
Button1.Text = "第二个:1"; } protected void Button1_Click(object sender, EventArgs e)
{
Button1.Text = "第二个:2";
}
-----------------------------------------------------------------------------------------
为什么交替显示后,控件里面的按钮要点两次才能相应,而且用户控件里按钮的Text 总是获取不到
@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm5.aspx.cs" Inherits="WebApp.WebForm5" %><%@ Register src="WebUserControl1.ascx" tagname="WebUserControl1" tagprefix="uc1" %>
<%@ Register src="WebUserControl2.ascx" tagname="WebUserControl2" tagprefix="uc2" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div >
<asp:Panel ID="Panel1" runat="server">
</asp:Panel>
</div>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="显示1" />
<asp:Button ID="Button2" runat="server" Text="显示2" onclick="Button2_Click" />
<asp:Button ID="Button3" runat="server" onclick="Button3_Click"
Text="用户控件里按钮的Text" />
</form>
</body>
</html>
-----------------------------------------------------------------------------------------------------
cs:
protected void Page_Load(object sender, EventArgs e)
{ if (!Page.IsPostBack)
{
Session["cname"] = "WebUserControl1.ascx";
}
addcontrol(); } protected void Button1_Click(object sender, EventArgs e)
{
Session["cname"] = "WebUserControl1.ascx";
addcontrol(); } protected void Button2_Click(object sender, EventArgs e)
{
Session["cname"] = "WebUserControl2.ascx";
addcontrol();
} void addcontrol()
{
Control uc = LoadControl(Session["cname"].ToString());
Panel1.Controls.Clear();
Panel1.Controls.Add(uc); } protected void Button3_Click(object sender, EventArgs e)
{
Response.Write((Panel1.Controls[0].Controls[0] as Button).Text);
}
--------------------------------------------------------------------------------------
WebUserControl1.ascx
html:<asp:Button ID="Button1" runat="server" Text="b1" onclick="Button1_Click"
Width="158px" />cs:protected void Page_Load(object sender, EventArgs e)
{
Button1.Text = "第一个:1"; } protected void Button1_Click(object sender, EventArgs e)
{
Button1.Text = "第一个:2";
}
-----------------------------------------------------------------------------------------WebUserControl2.ascx
html:
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />cs: protected void Page_Load(object sender, EventArgs e)
{
Button1.Text = "第二个:1"; } protected void Button1_Click(object sender, EventArgs e)
{
Button1.Text = "第二个:2";
}
-----------------------------------------------------------------------------------------
为什么交替显示后,控件里面的按钮要点两次才能相应,而且用户控件里按钮的Text 总是获取不到
解决方案 »
- MVC,怎么给控件设定默认值?
- 用 ajaxpro method 实现文件下载
- 问题:在类中为什么 Response不起作用呢? 该如何显示我想要的东西呢? 这样做主要是为了方便调试。
- 请问如何删除相同的字符串?
- 程序效率的问题,使用Cookie还是缓存?
- 怎样可以搜索到一些非英文、中文的代码?
- aspnet && flash
- 求救使用serv-u6.0.0.2遇到的问题
- web控件里textbox的输入法怎么强制关闭
- TextBox控件TextChanged事件为什么不能触发?????急!!!!
- 网站后台数据更新之后,刷新的还是老数据,得过一段时间查询才能显示正确的数据
- 操作Word问题,求教各位大虾 . . .
{ if (!Page.IsPostBack)
{
Session["cname"] = "WebUserControl1.ascx";//这里,页面第一次加载时会执行一次
}
addcontrol();//但是这里,页面第一次加载或者你点击当前页面上的任何按钮,它都会再次执行一次,
//比如你点击WebUserControl2.ascx用户控件里的那个按钮的protected void Button1_Click(object sender, EventArgs e)事件,则页面在回调时,照样会先执行addcontrol();一次,才接着去执行protected void Button1_Click(object sender, EventArgs e)事件
}
//再来分析一下你的这个动态加载控件的方法
void addcontrol()
{
Control uc = LoadControl(Session["cname"].ToString());
Panel1.Controls.Clear();//注意这里,你每次调用这个方法时,都会清空Panel1容器里的控件哦,所以,你的Panel1容器永远只有一个子控件
Panel1.Controls.Add(uc); }
//然后我们再来看看你的这个取Panel1容器里的子控件的方法:protected void Button3_Click(object sender, EventArgs e)
{
Response.Write((Panel1.Controls[0].Controls[0] as Button).Text);//正如我上面所提到的,你添加控件时,每次都先清空旧子控件,则Panel1容器里实际上只有一个子控件,你现在Panel1.Controls[0].Controls[0]怎么可能取得到对象?
}
//建议楼主先理解
protected void Page_Load(object sender, EventArgs e)
这个事件是无论如何都会被再次执行的,无论是第一次还是点击按钮回调什么的,反正请求服务器,服务器需要重新构造页面对象(就是要给网民看的网页),它都会执行,除非用了缓存,
//而且你要清楚,是先执行Page_Load事件,才后面执行Button3_Click这种点击事件的,别把顺序搞乱了//如果你理解了它们的执行顺序后,请楼主自己从头到尾地在脑海里模仿一下你的代码,一步步执行下去,就明白为什么代码有问题了
我之所以这样做,如果不在Page_load中重新加载,我在按钮事件中将获取不到自定义控件中的内容,
我也知道我的代码有问题,
就是想请教一下问题出在哪里呢
{ if (!Page.IsPostBack)
{
Session["cname"] = "WebUserControl1.ascx";
}
addcontrol(); }//改为
protected void Page_Load(object sender, EventArgs e)
{ if (!Page.IsPostBack)
{
Session["cname"] = "WebUserControl1.ascx";
addcontrol(); }
}//试下,其它先不变