动态加载用户控伯的问题
我在一个页面里如test.aspx,一个下拉列表,如选择选项一则动态加载用户控件user1.ascx,选择选项二则加载用户控件user2.ascx,这个没问题,
但在操作用户控件里的事件,如提交时,他又回到了初始加载的用户控件,怎么回事啊?我快疯了。。。
test.aspx
------------------------
private void Page_Load(object sender, System.EventArgs e)
{
if(Session["Login"]!=null)
{
LoadNews();//加载默认用户控件
}
else
{
Response.Redirect("error.aspx?para=nologin");
} }
user1.ascx
----------------------------------------
page_load里啥都没做,就是只在一个提交按钮里有事件而已。
急啊,请帮忙,谢谢
问题点数:50、回复次数:7Top
1 楼FreeIn2006(2006年起,我终于解脱了)回复于 2006-11-04 10:24:57 得分 0
注:用PlaceHolder加载的Top
2 楼FreeIn2006(2006年起,我终于解脱了)回复于 2006-11-04 10:31:10 得分 0
也就是动态加载的用户控件事件无法执行,但默认的可以,当执行其它的后全都回到了默认的那个用户控件,而且默认的里有个下载列表,也为空了。。。。。。。。。。。。。。。。Top
3 楼sp1234(asp.net不是一个语言,是一个操作系统)回复于 2006-11-04 12:51:07 得分 0
没看懂你的描述。
首先你确定动态加载用户控件的逻辑是否正确。你在页面上放一个按钮用于回发页面,然后看回发之后页面上是否加载了准确的动态控件并且是否保持了全部的状态。你把现象描述的简单直接一点。Top
4 楼sp1234(asp.net不是一个语言,是一个操作系统)回复于 2006-11-04 12:53:27 得分 0
我的意思是在页面上放一个与任何一个用户控件都无关的按钮,并且在操作用户控件的切换之后,用这个无关的按钮刷新页面。先诊断最基本的问题,不要一上来就在用户控件内部乱乱地测试。Top
5 楼free_wang()回复于 2006-11-04 13:11:24 得分 0
upTop
6 楼yanghuijun(会飞的鱼)回复于 2006-11-04 14:36:41 得分 0
这种情况确实要用placeholder控件动态加载!!
思路:
做一个COOKIE或SESSION保存你提交前下拉框中的值,然后在page_load中加载你cookie或session的值
如
在pageload事件中加入
PlaceHolder1.Controls.Clear()
PlaceHolder1.Controls.Add(.....)
其中....为你用户控件的路径,对应你下拉列表中值Top
7 楼blackant2(乔峰)回复于 2006-11-04 15:22:12 得分 0
这是用户控件1
<%@ Control Language="C#" ClassName="uc1" %>
<script runat="server">
//定义事件
public event EventHandler ButtonClick;
//绑定事件
protected void Page_Load(object sender, EventArgs e) {
this.btn_uc1.Click += new EventHandler(btn_uc1_Click);
}
//实现事件
void btn_uc1_Click(object sender, EventArgs e)
{
Response.Write("<br/>用户控件1响应button click事件");
ButtonClick(this,e);
}
</script>
<asp:Button runat="server" ID="btn_uc1" Text="uc1"/>
用户控件2
<%@ Control Language="C#" ClassName="uc2" %>
<script runat="server">
public event EventHandler ButtonClick;
protected void Page_Load(object sender, EventArgs e) {
this.btn_uc1.Click += new EventHandler(btn_uc1_Click);
}
void btn_uc1_Click(object sender, EventArgs e)
{
Response.Write("<br>用户控件2响应button click事件");
ButtonClick(this,e);
}
</script>
<asp:Button runat="server" ID="btn_uc1" Text="uc2"/>
两者只是表示不同,实现机制是一样的
在aspx页面中的调用如下
<%@ Page Language="C#" %>
<!--注册用户控件-->
<%@ Register Src="uc1.ascx" TagName="uc1" TagPrefix="uc1" %>
<%@ Register Src="uc2.ascx" TagName="uc2" TagPrefix="uc2" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
void Page_Load(object sender, EventArgs e) {
//依选择项不同动态载入控件,并绑定到不同的事件
if (rbl.SelectedIndex == 1)
{
uc2 uc2 = new uc2();
uc2.ButtonClick += new EventHandler(uc2_ButtonClick);
form1.Controls.Add(uc2);
}
else {
uc1 uc1 = new uc1();
uc1.ButtonClick += new EventHandler(uc1_ButtonClick);
form1.Controls.Add(uc1);
}
}
void uc2_ButtonClick(object sender, EventArgs e)
{
Response.Write("<br/>页面响应用户控件2的button click事件");
}
void uc1_ButtonClick(object sender, EventArgs e)
{
Response.Write("<br/>页面响应用户控件1的button click事件");
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:RadioButtonList runat="server" ID="rbl" AutoPostBack="true">
<asp:ListItem Text="用户控件1"></asp:ListItem>
<asp:ListItem Text="用户控件2"></asp:ListItem>
</asp:RadioButtonList>
</div>
</form>
</body>
</html>
Top




