首页 > 下载 > 下载详文:ASP.NET动态加载Web用户控件

ASP.NET动态加载Web用户控件

发布时间:2011年10月05日 10时24分37秒   属性:程序Web开发 > Microsoft    访问次数:74632
字体: 初始 添加收藏 分享给好友
ASP.NET动态加载Web用户控件

在ASP.NET项目开发中,Web用户控件在项目中开发者利用它来建立项目中的模块/Modules,然后当WebPage需要时可以将.ascx放入至WebPage的WebForm中,这样用户在Web用户控件.ascx文件中可以组合自己需要的模块控件,用以不同情况时需要。在本文中将介绍ASP.NET通过后台动态加载Web用户控件,在这里更重要的介绍在WebPage的WebForm中动态加载Web用户控件并且让在WebForm中的.ascx相互传值,通过后台Page_Load或者Click事件加载用户控件,下面是结构示意图。

示例开发环境:

  • 示例开发环境为.NET FrameWork 3.5,为了显示效果用AJAX UpdatePanel。

详细步骤

建立好ASP.NET网站项目后在项目中新建文件夹命名为Modules。然后在Modules文件夹中建立两个Web用户控件,分别为WebUserControl_A.ascx和WebUserControl_B.ascx;在WebUserControl_A.ascx中放入一个Label和一个Button控件(Label的ID为默认;Button的ID为BtnTime,onclick为BtnTime_Click,按钮文字显示为ButtonTime),在WebUserControl_B.ascx中放入一个Label并且让其在Page_Load中显示系统当前时间和一个超链接(Label的ID为默认,文字颜色ForeColor显示为#FF0066,同时在Label外面嵌套一个div,定义其div的Css样式为background-color:#333333; width:400px; height:300px),下图为Modules建立里面的Web用户控件.ascx文件。

在Default.aspx前台页面中放入AJAX控件ScriptManager和UpdatePanel控件,然后放入三个按钮ID分别为ButtonA、Btn_Add、Btn_Clear,onclick分别为ButtonA_Click、Btn_Add_Click和Btn_Clear_Click,然后加入两个div用以加载显示模块中的ascx文件,将div定义为服务器控件形式,分别加入ID为ControlPanel、ControlPanel01,同时加入 runat="server"属性。

Default.aspx 前台代码  复制
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <%@ Register Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Namespace="System.Web.UI" TagPrefix="asp" %> <!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:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <asp:Button ID="ButtonA" runat="server" onclick="ButtonA_Click" Text="ButtonA" /> <asp:Button ID="Btn_Add" runat="server" onclick="Btn_Add_Click"
Text="Add" /> <asp:Button ID="Btn_Clear" runat="server" onclick="Btn_Clear_Click" Text="Clear" /> <br /> <div id="ControlPanel" runat="server"></div> <div id="ControlPanel01" runat="server"></div> </ContentTemplate> </asp:UpdatePanel> </div> </form> </body> </html>

Default.aspx后台代码,在Default.aspx.cs后台Page_Load中将Control controlA加入到div ControlPanel中,controlA的Page.LoadControl为"Modules/WebUserControl_A.ascx",此时Modules/WebUserControl_A.ascx就相当于代理给控件controlA,然后查找controlA中的Label控件Label1,并且将其Text文字属性赋值为"<H1>Hello World!!</H1>",同时还将controlA中的Button控件BtnTime查找出来,并且将其Click事件EventHandler给myBtn_Click。在myBtn_Click事件中将controlB加入到div ControlPanel01中,controlB的Page.LoadControl为"Modules/WebUserControl_B.ascx",同样此时的"Modules/WebUserControl_B.ascx"就相当于带给控件controlB了,然后将controlB中Label控件Label1查找出来,并且也将controlA中的Label控件Label1查找出来将其Text值赋值给controlB中的Label1的Text。其它在Btn_Clear按钮中的Click事件中让ControlPanel的Controls清空,即ControlPanel.Controls.Clear();,下面是详细代码。

C# 代码  复制
using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; /// <summary> ///ASP.NET动态加载Web用户控件 ///Copyright (C) 遗昕 | weisim3.com 10.05.2011 /// </summary> public partial class _Default : System.Web.UI.Page { private Control controlA; private Control controlB; protected void Page_Load(object sender, EventArgs e) { controlA = Page.LoadControl("Modules/WebUserControl_A.ascx"); ControlPanel.Controls.Add(controlA);//加载WebUserControl_A.ascx Label myLbl = (Label)controlA.FindControl("Label1"); myLbl.Text = "<H1>Hello World!!</H1>"; Button myBtn = (Button)controlA.FindControl("BtnTime"); myBtn.Click += new EventHandler(myBtn_Click); } protected void ButtonA_Click(object sender, EventArgs e) { } void myBtn_Click(object sender, EventArgs e) { controlB = Page.LoadControl("Modules/WebUserControl_B.ascx"); ControlPanel01.Controls.Add(controlB);//加载WebUserControl_B.ascx Label myLbl = (Label)controlA.FindControl("Label1"); Label LblData = (Label)controlB.FindControl("Label1"); myLbl.Text = "<H1>" + LblData.Text + "</H1>"; } protected void Btn_Add_Click(object sender, EventArgs e) { Control controlA = Page.LoadControl("Modules/WebUserControl_A.ascx"); ControlPanel.Controls.Add(controlA); } /// <summary> /// Btn_Clear_Click -> 清除CongrolPanel内的控件/Controls Clear /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Btn_Clear_Click(object sender, EventArgs e) { ControlPanel.Controls.Clear(); } }

程序执行效果如下图

本文示例可以在.NET 2.0以上版本环境下建立,如果是.NET2.0环境需要配置Webconfig文件加入AJAX配置,并且安装.NET2.0的AJAX包,如果是Visual studio 2010 IDE .NET2.0只需要配置完Webconfig的AJAX配置将System.Web.Extensions.Design.dll和System.Web.Extensions引入到项目中即可。

免费
ASP.NET动态加载Web用户控件 (34)
本下载连接不支持第三下载工具打开,请直接点击下载即可
文章版权归属weisim3.com所有,未经书面版权许可同意,不得私自转载(或做修改转载),源文件示例仅供学习使用,更不要出于商业用途或印刷出版发行!否则将追究其相关法律责任,版权联系QQ:729260499。
遺昕 | Weisim3.com 下载许可条款 ( 您必须接受同意才可下载 ) .