博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态加载用户控件----以用户控件的方式达到代码分离的目的[转]
阅读量:7089 次
发布时间:2019-06-28

本文共 2504 字,大约阅读时间需要 8 分钟。

from:http://kaliking.blog.51cto.com/58641/6738
原作:
《Asp.Net Forums2.0深入分析》之 Asp.Net Forums是如何实现代码分离和换皮肤的
 
模拟Asp.Net Forums实现可以换皮肤的控件 
 
本人以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" "
">
<html xmlns="
" >
<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
,如需转载请自行联系原作者
你可能感兴趣的文章
C++实践参考——复数类中的运算符重载
查看>>
【Spark Summit East 2017】为了乐趣和利润的全球扩张
查看>>
Rss订阅
查看>>
Mac - gdb配置
查看>>
Vuejs——(4)v-if、v-for
查看>>
让Spark成为你的瑞士军刀
查看>>
[LeetCode]--40. Combination Sum II
查看>>
ART世界探险(16) - 快速编译器下的方法编译
查看>>
多线程常用方法 sleep wait join等以及对锁的控制
查看>>
MPEG-DASH新功能白皮书翻译
查看>>
关于图片在内存中的大小(k或者M)
查看>>
2018 一份"有点难"的iOS面试题(5年iOS开发)
查看>>
linux mint19-日常使用笔记
查看>>
如何快速掌握一个ui框架
查看>>
git过滤
查看>>
web开发安全框架中的Apache Shiro的应用
查看>>
赵童鞋带你入门PHP(一) 开发环境搭建
查看>>
JavaScript 七大继承全解析
查看>>
nginx正则表达式(上篇)
查看>>
Spark入门(六)--Spark的combineByKey、sortBykey
查看>>