加载用户控件的一些方式(部分参考网络)
来源:互联网 发布:淘宝网成交量 编辑:程序博客网 时间:2024/05/20 11:49
如有不明白的地方欢迎加QQ群14670545 探讨
主要是通过System.Web.UI.UserControl的LoadControl方法
1.模版型
我们新建一个txt文件,里面写入一个用户控件的代码
<%--用户控件模板--%><%@ Control Language="C#" ClassName="MyPage" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><script runat="server"> protected void Button1_Click(object sender, EventArgs e) { Calendar1.BackColor = System.Drawing.Color.LightBlue; } protected void Calendar1_DayRender(object sender, DayRenderEventArgs e) { if (e.Day.Date == DateTime.Now.Date) { e.Cell.Controls.Clear(); var img = new Image { ImageUrl = "http://avatar.profile.csdn.net/1/8/D/2_sp1234.jpg", AlternateText="今日" }; e.Cell.Controls.Add(img); } }</script><html xmlns="http://www.w3.org/1999/xhtml"><head id="Head1" runat="server"> <title></title></head><body> <form id="form1" runat="server"><asp:Calendar ID="Calendar1" runat="server" ondayrender="Calendar1_DayRender"></asp:Calendar>aslkdfka dsfasdfasdf<br /><asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /> </form></body></html>
新建一个页面ExecuteTXT.aspx,来执行我们要加载的用户控件
页面代码如下
<%@ Page Language="C#" %><script runat="server"> protected void Page_Load(object sender, EventArgs e) { var tar = Server.MapPath("~/Manager/MyPage.ascx"); if (!System.IO.File.Exists(tar)) System.IO.File.Copy(Server.MapPath("~/Manager/MyPage.txt"), tar); var uc = this.LoadControl("~/Manager/MyPage.ascx"); this.Controls.Add(uc); }</script>
这时候我们运行ExecuteTXT.aspx文件就会在对应目录下面生成一个MyPage.ascx文件。效果自己可以看到
这么做的好处是,我们可以在后台随时编辑这个txt文件。当然,如果这个用户控件有服务器控件事件的话,这点不好处理,需要专门写一些规则来定义,然后按照规则来编辑事件,其实也好处理,因为我们可以自定义控件,然后按规则来生成,相当于cms的模板一样。也就是说
if (!System.IO.File.Exists(tar)) System.IO.File.Copy(Server.MapPath("~/Manager/MyPage.txt"), tar);这一段我们做加工处理啦
2.重写Render方法
写一个基类,比如WrapperPageBase .cs,它继承于System.Web.UI.Page
代码如下:
namespace MyWebSiteTest{ public class WrapperPageBase : System.Web.UI.Page { /// <summary> /// /// </summary> public System.Web.UI.UserControl control { get; set; } protected override void Render(System.Web.UI.HtmlTextWriter writer) { if (control == null) control.LoadControl("~/Controls/default.ascx"); control.RenderControl(writer); base.Render(writer); } }}
OK,我们去Controls文件夹下面新建几个用户控件
下面做简单的测试,代码也就简单的写了下:
ccA:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ccA.ascx.cs" Inherits="MyWebSiteTest.Controls.ccA" %>我是ccA控件呈现的
ccB:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ccB.ascx.cs" Inherits="MyWebSiteTest.Controls.ccB" %>我是ccB控件呈现的
default:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="default.ascx.cs" Inherits="MyWebSiteTest.Controls.default" %>我是default控件呈现的
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="JustWant.ascx.cs" Inherits="MyWebSiteTest.Controls.JustWant" %>我是ccA控件呈现的
做完这些,下面我们新建一个页面,比如Ajax_Test.aspx,它的后台.cs文件继承WrapperPageBase,上面我们写过的
然后在它的后台文件中添加如下代码:
namespace MyWebSiteTest.Manager{ public partial class Ajax_Test : WrapperPageBase { protected void Page_Load(object sender, EventArgs e) { var str = Request["Want"]; if (str == "IWantA") this.control = (UserControl)this.LoadControl("~/Controls/ccA.ascx"); // 用户控件ccA else if (str == "IWantB") this.control = (UserControl)this.LoadControl("~/Controls/ccB.ascx"); // 用户控件ccB else if (str == "JustWant") this.control = (UserControl)this.LoadControl("~/Controls/JustWant.ascx");//用户控件JustWant else this.control = (UserControl)this.LoadControl("~/Controls/default.ascx"); } }}
到此,自己测试下吧。
- 加载用户控件的一些方式(部分参考网络)
- Windows bash小结(部分参考网络)
- 用户控件(动态加载)
- 动态加载用户控件的组件!(二)
- 动态加载用户控件的组件!(三)
- 动态加载用户控件的组件!(四)
- 动态加载用户控件的组件!(终结MasterPages技术)
- 动态加载用户控件的组件!(二)
- 动态加载用户控件的组件!
- 动态加载用户控件的组件!
- 动态加载用户控件的组件!
- 动态加载用户控件的组件
- 动态加载用户控件的组件!
- 另类的动态加载用户控件
- 动态加载用户控件的赋值
- 用GCD的方式,加载网络图片(主线程加载图片+类扩展方式)
- 动态加载用户控件(整理)
- 动态加载用户控件
- 英飞凌最新资料大全
- 从HelloWold开始一个操作系统
- Android实战技巧:为从右向左语言定义复杂字串
- Android-Watchdog
- 2011年企业架构的五个范畴
- 加载用户控件的一些方式(部分参考网络)
- MFC为窗口创建线程,以及线程与窗口间的通信
- Unicode Bidi 是一门学问
- 动态规划
- sql*plus 中输出格式控制技巧
- JAVA 比较两个日期相差的天数
- 四叉树与八叉树
- 网络管理系统、网管、network manage system、运维系统
- DevExpress控件汉化类