积极答复者
如何触发用户控件事件????

问题
答案
-
用户控件代码 public partial class WebUserControl : System.Web.UI.UserControl { public event EventHandler d; public bool a { get { return DropDownList1.AutoPostBack; } set { DropDownList1.AutoPostBack = value; } } public string s { get { return DropDownList1.SelectedValue; } } protected void Page_Load(object sender, EventArgs e) { } protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) { d(sender, e); } } 用户控件 <%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl.ascx.cs" Inherits="WebUserControl" %> <asp:DropDownList ID="DropDownList1" runat="server" onselectedindexchanged="DropDownList1_SelectedIndexChanged"> <asp:ListItem>1</asp:ListItem> <asp:ListItem>2</asp:ListItem> </asp:DropDownList> aspx页面代码 public partial class Default5 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { WebUserControl1.a = true; WebUserControl1.d += new EventHandler(WebUserControl1_d); } void WebUserControl1_d(object sender, EventArgs e) { Response.Write(WebUserControl1.s); } } aspx页 <uc1:WebUserControl ID="WebUserControl1" runat="server" />
全部回复
-
-
你好AutoPostBack 要设置为True
Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond -
你好AutoPostBack 要设置为True
Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
已经设置了得哈 -
-
-
- 已建议为答案 mldark 2009年8月26日 7:40
- 取消建议作为答案 孟宪会Moderator 2009年8月26日 8:22
- 已标记为答案 ysyy 2009年8月28日 3:34
- 取消答案标记 ysyy 2009年8月28日 3:34
-
用户控件代码 public partial class WebUserControl : System.Web.UI.UserControl { public event EventHandler d; public bool a { get { return DropDownList1.AutoPostBack; } set { DropDownList1.AutoPostBack = value; } } public string s { get { return DropDownList1.SelectedValue; } } protected void Page_Load(object sender, EventArgs e) { } protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) { d(sender, e); } } 用户控件 <%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl.ascx.cs" Inherits="WebUserControl" %> <asp:DropDownList ID="DropDownList1" runat="server" onselectedindexchanged="DropDownList1_SelectedIndexChanged"> <asp:ListItem>1</asp:ListItem> <asp:ListItem>2</asp:ListItem> </asp:DropDownList> aspx页面代码 public partial class Default5 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { WebUserControl1.a = true; WebUserControl1.d += new EventHandler(WebUserControl1_d); } void WebUserControl1_d(object sender, EventArgs e) { Response.Write(WebUserControl1.s); } } aspx页 <uc1:WebUserControl ID="WebUserControl1" runat="server" />
-
我使用的是这个http://www.cnblogs.com/xbf321/archive/2008/08/01/Dynamic-load-control-in-asp-net.html里面介绍的方法
我点错了建议为答案 不好意思 -
用户控件代码:
protected void DropDownList1_SelectedIndexChanged1(object sender, EventArgs e)
{
int a = 0;
}
BasePage类:
public class BasePage : Page
{
// SESSION_CONTAINERS_KEY将被用做Session 的值来保存
private const string SESSION_CONTAINERS_KEY = "Controls_In_Container";//PATH_TO_CONTROL则定义了您的程序所要载入用户控件的虚拟路径
private const string PATH_TO_CONTROL = "~/App_Controls/{0}";
#region 添加数据字典属性
//把添加到页面上所有用户控件的每一个PlaceHolder放到一个字典中,页面上所有的PlaceHoder都有一个数据字典,并且每一个PlaceHolder都有一个用户控件集合的数据字典。
protected Dictionary<string, Dictionary<string, UserControl>> Container
{
get
{
Dictionary<string, Dictionary<string, UserControl>> containers =
new Dictionary<string, Dictionary<string, UserControl>>();
if (Session[SESSION_CONTAINERS_KEY] != null)
containers = (Dictionary<string, Dictionary<string, UserControl>>)Session[SESSION_CONTAINERS_KEY];return containers;
}
}
#endregion#region 创建用户控件实列的方
//这个方法很简单,我们只是把传过来的controlName,controlKey进行格式转换。对于controlName,我们把*~/App_Controls/{0}*其中的{0}参数, 替换成想 *~/App_Controls/MyControl.ascx"的形式,而把该Control的ID,用Guid值替换掉*MyControl_{0}*中的{0}参数
protected UserControl CreateControlInstance(string controlName, string controlKey)
{UserControl newControl =
(UserControl)LoadControl(string.Format(PATH_TO_CONTROL, controlName));
newControl.ID = string.Format(controlKey, Guid.NewGuid().ToString());return newControl;
}
#endregion#region
//接受两个参数,一个是您所添加的用户控件,一个是您想把该用户控件添加到传过来的指定的PlaceHolder.首先该方法会检查在Containers容器的列表中,连同添加到其中的Controls是否保存在Sesssion变量中,在这里您是否还记得我在上面提到的SESSION_CONTAINERS_KEY常量,它就是用作Session变量的retreival key。
//如果这个Session变量为空,也就意味着用户是首次添加一个用户控件,之后则创建一个Container的实列。
//该代码也检查在该Container容器中是否包含以PlaceHoler的ClientID为名称的字典,如果没有则说明用户控件是首次添加到指定的PlaceHolder控件中,为此,则添加一个新的空的的记录来保存将来要添加到该PlaceHolder中的UserControl或UserControls。
//随后在检查在该指定的PlaceHolder中是否包含以用户控件的ClientID为健的控件,如果没有,则添加到其PlaceHolder中。
//最后。Session[SESSION_CONTAINERS_KEY]被新的或者以更新的container所更新。protected void AddControlToContainer(UserControl c, PlaceHolder phContainer)
{Dictionary<string, Dictionary<string, UserControl>> containers = null;
if (Session[SESSION_CONTAINERS_KEY] != null)
containers = (Dictionary<string, Dictionary<string, UserControl>>)Session[SESSION_CONTAINERS_KEY];
if (containers == null)
containers = new Dictionary<string, Dictionary<string, UserControl>>();
if (!containers.ContainsKey(phContainer.ClientID))
containers.Add(phContainer.ClientID, new Dictionary<string, UserControl>());
if (containers[phContainer.ClientID] != null)
containers[phContainer.ClientID].Add(c.ClientID, c);
Session[SESSION_CONTAINERS_KEY] = containers;
}
#endregion#region 负责把所有的用户控件添加到Aspx页面中
// 该方法接收一个PlaceHolder作为其参数,并首先验证并确认在Container中是否包含相应的PlaceHolder,如果有,则循环所有指定Container中的所有记录,并把每一个用户控件添加到接收的PlaceHolder中。之后将会自动呈现在Aspx页面中
protected void LoadExistingControls(PlaceHolder phContainer)
{if (
(this.Container != null) &&
(this.Container.Count > 0)
)
{if (!this.Container.ContainsKey(phContainer.ClientID))
return;
phContainer.Controls.Clear();
foreach (KeyValuePair<string, UserControl> value in this.Container[phContainer.ClientID])
{
phContainer.Controls.Add(value.Value);
}
}
}
#endregion}
主页面New_Oper1.aspx
public partial class New_Oper1 : BasePage
{
private const string MYCONTROL = "MyControl.ascx";
private const string MYCONTROL_ID = "MyControl_{0}"; //确保所有的Control是否添加到页面的ControlCollection中
protected void Page_Init(object sender, EventArgs e)
{
LoadExistingControls(this.phContainer);
}
protected void Page_Load(object sender, EventArgs e)
{
}
public void AddOper()
{
UserControl c = CreateControlInstance(MYCONTROL,MYCONTROL_ID);
AddControlToContainer(c, this.phContainer);
LoadExistingControls(this.phContainer);
}protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
AddOper();
} -
你好,
你自定义的这个就是一个UserControl。
这个事件DropDownList1_SelectedIndexChanged1如果是在UserControl中定义的,而且已经设置了AutoPostback=true,触发应该是没有问题的。
其实可以简单做一个例子试试。
1.右键单击你的项目选择添加新项,添加一个后缀名为ascs的web usercontrol 项。
2.在usercontrol中,从工具栏中拖一个dripdownlist控件到界面上,设置其AutoPostback=true,并添加selectedchanged处理事件。
3.把该usercontrol直接从项目窗口中拖到一个主页面中。
4.最后测试该主页面。
Microsoft Online Community Support