动态加载用户控件----以用户控件的方式达到代码分离的目的[转]

简介:
from:http://kaliking.blog.51cto.com/58641/6738

原作:
《Asp.Net Forums2.0深入分析》之 Asp.Net Forums是如何实现代码分离和换皮肤的
 
模拟Asp.Net Forums实现可以换皮肤的控件 
http://webuc.net/dotey/archive/2004/05/28/835.aspx
 
本人以VB代码实践了一次...
 
首先是基类,class1
Imports System
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.IO
Namespace WebUC
    ' <summary>
    ' 换皮肤控件基类
    ' </summary>
    <ParseChildren(True)> _
    Public Class Class1: Inherits WebControl
        Implements INamingContainer
        Dim skinFn As String = Nothing
        Public Sub New()
            If (SkinFilename = Nothing) Then
                SkinFilename = "wc1.ascx"
            Else
                SkinFilename = skinFn
            End If
        End Sub
        Protected Overrides Sub CreateChildControls()
            Dim skin As Control
            ' 装载用户控件文件
            skin = LoadSkin()
            ' 初始化控件和对控件绑定
            InitializeSkin(skin)
            Controls.Add(skin)
        End Sub

        ' <summary>
        ' 装载用户控件文件
        ' </summary>
        ' <returns></returns>
        Protected Function LoadSkin() As Control
            Dim skin As Control
            ' 用户控件文件默认放在Themes目录下
            Dim skinPath As String = SkinFilename
            ' 是否定义了用户控件文件?
            If SkinFilename = Nothing Then Throw New Exception("必须定义SkinFilename属性,指定用户控件文件路径")
            ' 通过Page.LoadControl(defaultSkinPath)方法,从用户控件文件中获取 UserControl 对象
            Try
                skin = Page.LoadControl(skinPath)
            Catch ex As Exception
                Throw New Exception("用户控件文件未找到!")
            End Try
            Return skin
        End Function

        ' <summary>
        ' 初始化控件,并绑定控件数据
        ' </summary>
        ' <param name="skin"></param>
        Protected Overridable Sub InitializeSkin(ByVal skin As Control)
        End Sub
 
        ' <summary>
        ' 用户控件文件路径
        ' </summary>
        Public Property SkinFilename() As String
            Get
                Return skinFn
            End Get
            Set(ByVal value As String)
                skinFn = Value
            End Set
        End Property

    End Class
End Namespace
 
 
然后是个用户控件
 
wc1.ascx:
 
<%@ Control Language="VB" AutoEventWireup="false" CodeFile="wc1.ascx.vb" Inherits="wc1" %>
<asp:TextBox ID="TextBox1" runat="server">wc1</asp:TextBox>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<asp:CheckBox ID="CheckBox1" runat="server" />
 
最后是创建个页面文件,并根据SkinFilename属性加载用户控件:
 
page1.aspx
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="page1.aspx.vb" Inherits="page1" %>
<%@ Register TagPrefix="uc" Namespace="WebUC"%>
<!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>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <uc:Class1 runat="server" SkinFilename="wc1.ascx" />
    </div>
    </form>
</body>
</html>
 
 
以上功能,一定程度上可以取代.net 2.0 的master母页,甚至可以说,更加简便
欢迎加群互相学习,共同进步。QQ群:iOS: 58099570 | Android: 572064792 | Nodejs:329118122 做人要厚道,转载请注明出处!



















本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/sunshine-anycall/archive/2009/10/14/1583228.html ,如需转载请自行联系原作者




相关文章
WPF界面无法正常显示(资源引用,如转换器),但程序正常运行
WPF界面无法正常显示(资源引用,如转换器),但程序正常运行
WPF界面无法正常显示(资源引用,如转换器),但程序正常运行
|
JavaScript
封装代码编辑组件
封装代码编辑组件
封装代码编辑组件
|
XML 程序员 C语言
Qt编写控件属性设计器1-加载插件
一、前言 加载插件是整个属性设计器的第一步要打通的功能,插件中的控件都加载不了,后面就别搞别玩下去了没法玩的,要从一个动态库中加载出来控件,肯定需要用到反射机制,以前做.NET开发的时候就觉得反射这个东西相当强大,居然可以读取DLL加载出来控件,现在用Qt,发现Qt也有反射机制,也许这东东可能各大.
1009 0
|
测试技术
表单控件续(1)——应用接口来简化和分散代码
上次有点仓促,有几个地方没有明确。 1、两篇随笔可以合在一起看 能自己“跑”的表单控件,思路,雏形,源码。vs2005版本 我写项目的步骤。抛砖引玉。   后者是整个流程,前者是其中的一个步骤,是一个简单的思路说明,其中前三段代码都是表单控件里面的。
895 0
|
前端开发 容器
用MVVM模式开发中遇到的零散问题总结(5)——将动态加载的可视元素保存为图片的控件,Binding刷新的时机
原文:用MVVM模式开发中遇到的零散问题总结(5)——将动态加载的可视元素保存为图片的控件,Binding刷新的时机       在项目开发中经常会遇到这样一种情况,就是需要将用户填写的信息排版到一张表单中,供打印或存档。
795 0
|
Android开发 UED
独立于视图的加载控件--让视图更干净
项目源码请参考https://github.com/CarryGanLove/LoadingHelper 背景和问题 在app后sdk开发过程中,如果有遇到延时任务的时候,往往需要添加一个通用的loading控件用来展示给用户,一来为了提示用户当前有耗时的操作,二来降低用户的等待感提升用户体验。
957 0
|
开发工具 开发者 Windows
UWP: 妙用自定义 Action 以简化并重用代码
原文:UWP: 妙用自定义 Action 以简化并重用代码     相信每一位 App 开发者,在开发过程中,都会有一些代码被反复用到,比如:复制文本,打电话,发短信,发邮件,给应用添加评论等等。在项目之间复制这些代码段,实在不是一个好办法,所以大家可能会把这些代码放到一个类似 Utility 类中,或者一个库(Class Library)中,再加以调用。
1259 0
|
JavaScript 前端开发 C++
COM组件开发实践(七)---多线程ActiveX控件和自动调整ActiveX控件大小(上)
声明:本文代码基于CodeProject的文章《A Complete ActiveX Web Control Tutorial》修改而来,因此同样遵循Code Project Open License (CPOL)。
842 0