ASP.NET 2.0中动态混合使用MasterPage和主题

ASP.NET WebForms Page生命周期与ViewState深度解析 ASP.NET WebForms是一种基于服务端控件、事件驱动和状态保持的传统Web开发模型。其核心在于Page生命周期的严格时序控制、ViewState的状态序列化机制,以及PostBack触发的服务器端事件路由原理。理解Init/Load/PreRender等阶段的执行边界,可精准定位数据丢失、事件不触发、控件状态异常等高频问题;掌握ViewState的差异存储本质与粒度化启停策略,能有效规避性能瓶颈与安全风险。本文聚焦Page生命周期、ViewState、PostBack三大技术支柱,结合真实政企系统 阅读详情

ASP.NET 2.0初接触—使用MasterPage和 主题

2006-4-15

前言

在ASP.NET Froum 2.0中我学习和使用MasterPage,然后也可以使用自定义控件的方式来使用主题。但这种在ASP.NET1.1 中方式使用相当不便,因为每个页面都需要做成一个自定义控件,才能更好的控制。同时,无法可视化的进行编辑也是相当的不习惯。

ASP.NET 2.0中使用MasterPage和主题来解决这个问题,即:用户自定义介面和程序员统计控制的界面。

在我的第一个ASP.NET的示例中,我们一步步的来完成整个过程。

新建项目

与VS.NET 2003 不同,Vs.net 2005是使用“新建网站”菜单来新建Web项目,这让我一开始接触时找了老半天。

有意思的是。Vs.net 2005不再需要IIS作直接支持,而是使用了另一个所谓的轻重级的IIS程序来作为调试平台。

完全新建的页面如下所示:

使用Master Page

经常使用的在项目菜单上右击生成新的页面的菜单不见了,需要通过主菜单中的“网站”à“添加新项”来完成。现在先新建一个Master页面

然后进行master页面的设计:

对应的代码如下:

<%@ Master Language="VB" CodeFile="MyDefault.master.vb" Inherits="MyDefault" %>

 

<!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 align=center >

    <table width =800><tr><td  hight=150 style="height: 100px"><asp:contentplaceholder id="cnhHead" runat="server">

    </asp:ContentPlaceHolder>

    </td></tr>

    <tr><td><table width=100%  hight=500><tr><td style="width: 156px"><asp:contentplaceholder id="cnhMainLeft" runat="server">

    </asp:ContentPlaceHolder>

    </td><td><asp:contentplaceholder id="cnhMain" runat="server">

        </asp:ContentPlaceHolder>

        </td></tr></table></td></tr>

    <tr><td  hight=50><asp:contentplaceholder id="cnhFooter" runat="server">

    </asp:ContentPlaceHolder>

    </td></tr></table>

    </div>

    </form>

</body>

</html>

在这个master页中,我们使用了四个Holder控件来占位。

接着,需要使用此Master页面来设计和显示最后显示的页面:

(1)新建页面,确定勾选了“选择母版页”

(2)选择刚才的生成的母版页

(3)设计新的页面如下:

使用主题

新建一个主题,选择项目上的右击,然后出现新建主题菜单

系统自动生成App_Themes目录,我生成了两个主题,一个叫Blue一个叫Default。目录如下:

(1)在Default中加入新的皮肤,右击Default文件夹,然后选择“添加新项”

对它进行相当的Coder

 

<asp:label runat="server" SkinID="DefaultLabelGray"  class="MyDefaultLableGray"/>

<asp:label runat="server" SkinID="DefaultLabelWhite" class="MyDefaultLableWhite" />

 

<asp:TextBox runat="server" SkinID="DefaultGray" class="DefaultTextBoxGray"/>

<asp:textbox  runat="server" SkinID="DefaultWhite" class="DefaultTextBoxWhite"/>

 

<asp:button runat="server" SkinID="BlueButton" BackColor="Orange" />

 

(2)使用CSS 文件来帮助SkinFile.Skin进行相应的样式设定:

然后设定CSS

.MyDefaultLableGray

{

     color: mediumblue;

     background-color: #cccccc;

}

.MyDefaultLableWhite

{

     color: #99ff66;

     background-color: #666699;

}

.DefaultTextBoxGray

{

     border-left-color: #ff9966;

     border-bottom-color: #ff9966;

     border-top-style: inset;

     border-top-color: #ff9966;

     border-right-style: inset;

     border-left-style: inset;

     background-color: #9999ff;

     border-right-color: #ff9966;

     border-bottom-style: inset;

}

.DefaultTextBoxWhite

{

     border-left-color: #cccc33;

     border-bottom-color: #cccc33;

     border-top-style: double;

     border-top-color: #cccc33;

     border-right-style: double;

     border-left-style: double;

     background-color: #cccccc;

     border-right-color: #cccc33;

     border-bottom-style: double;

}

.DefaultButton

{

     border-right: #669966 thin solid;

     border-top: #669966 thin solid;

     border-left: #669966 thin solid;

     border-bottom: #669966 thin solid;

     background-color: #6666ff;

}

在ASP.NET 2.0下,终于可以相对可视的生成CSS样式了,操作过程跟Dreamweaver之类的软件相类似。

(3)使用固定样式皮肤

在设计视图中,对MyFirstPage使用Default布局,如上图:

然后,一个一个的设定控件的风格,即:SkinID,如下图:

 

然后按F5运行程序,结果如下所示:

这个改变来自于Page中的这样的一行代码:

<%@ Page Language="VB" MasterPageFile="~/MyDefault.master" AutoEventWireup="false" CodeFile="MyFirstPage.aspx.vb" Inherits="MyFirstPage" title="Untitled Page" Theme="Default" %>

现在你应当已经会使用固定不变的主题了。

(4)可以改变的主题

主题的设计就在于完全的改变风格。结合MasterPage,你可以将整个页面风格(包括布局方式)进行完全的改变。一般说来,不同的用户,需要不同的风格主题(不明白的就去看看msn spaces),所以动态加载主题是必要的。

在页面左边加入以下代码:

    <asp:DropDownList

        id="dropTheme"

        AutoPostBack="true"

        Runat="Server">

        <asp:ListItem Text="DefaultTheme" />

        <asp:ListItem Text="BlueTheme" />

</asp:DropDownList>

结果如下:

我们想到通过选择下拉列表框来显示动态的theme

在对应的codehind代码中加入Page的preinit事件

  Protected Sub Page_PreInit(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreInit

         Page.Theme = Request("ctl00$cnhMainLeft$dropTheme")

End Sub

由于theme初始化相当早,所以,需要在preInit事件中处理它。同时是直接取dropTheme

的request串。由于postback来的是客户端ID,所以我们这儿直接使用客户端ID(因为使用了Master页,所以客户端ID的结果就成为"ctl00$cnhMainLeft$dropTheme"这样的格式,实际使用中要更麻烦一些,可以使用别的办法来变通)

对比blue样式(没有定义,所以相当于没有使用)

我们看到:它能正常的工作!!

综合使用动态的MasterPage 和theme

现在让我们做一下小小的修改,让程序可以现时支持动态的装入主题和母版页

(1)    新建一个MasterPage,要求内容跟原有的default一样,只是布局不同,如下:

我们看到,这个布局只是简单的把它左右交换了一下。名为Blue.master

(2)    为了方便,把原来的myDefult.master也改为Default.master

同时更改MyFirstPage.aspx文件的头部为:

<%@ Page Language="VB"  MasterPageFile="~/Default.master"  AutoEventWireup="false" CodeFile="MyFirstPage.aspx.vb" Inherits="MyFirstPage" title="Untitled Page"  %>

才好与它对应。

(3)    然后把对应的aspx.vb代码改为:

 

    Protected Sub Page_PreInit(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreInit

        Page.Theme = Request("ctl00$cnhMainLeft$dropTheme")

        If Request("ctl00$cnhMainLeft$dropTheme") <> "" Then

            Page.MasterPageFile = "~/" + Request("ctl00$cnhMainLeft$dropTheme") + ".master"

        End If

 

End Sub

看看最后的结果:

对比可知:无论是样式还是布局都可以动态的改变,达到我们个性化界面的基本需要。

 

ASP.NET Web Forms深度解析:从Page生命周期到生产部署 ASP.NET Web Forms是微软早期面向Windows平台的Web开发模型,其核心在于事件驱动、服务端控件与ViewState状态维持机制。理解其Page生命周期、Postback协议映射、HttpModule管道介入等底层原理,不仅有助于维护大量现存的.NET Framework遗留系统,更能反向深化对现代框架(如ASP.NET Core中间件、React状态管理)设计哲学的认知。在政务、金融、央企等强合规场景中,Web Forms仍承担着关键业务系统支撑任务,尤其在需零操作习惯变更、快速改造VB 阅读详情

相关推荐

【HDR】曝光融合(Exposure Fusion)

在曝光融合(Exposure Fusion)算法问世之前,多曝光序列合成用于显示的HDR需要两个步骤,第一步是将多张不同曝光的低动态范围图像合成为HDR(例如Debevec提出的加权融合方法),通常HDR为12bit或者16bit;第二步是通过tonemapping对高动态范围HDR进行压缩以支持低动态范围显示设备(例如Durand提出的基于双边滤波的tonemapping算法),一般会压缩至8bit。

专注人工智能,主攻CV 1万+

Butterfly-蝴蝶-主题优化、美化-Lete乐特

前言 本片文章涉及到修改源码,如果你要升级主题的话,你看到这里可以关闭本文章了。 本文所做的优化是我自己hexo init后,去Github上克隆Butterfly主题的稳定版,一步步在原主题基础上修改的 保证了小白根据本片文章一步步操作,能够和我博客一样的效果 如果你不想跟随下文一步步操作的话可以使用我优化好的:https://github.com/lete114/Hexo-themes-Butterfly-Lete 喜欢的话可以留下你的⭐Star 修改头部导航栏 修改前 # Main menu n

乐特的博客 38万+

在Jetson Orin (Arm64)上从Ubuntu22.04回退至20.04的完整指南及ROS-noetic适配方案

本文提供了在Jetson Orin (Arm64)设备上将Ubuntu 22.04系统回退至20.04 LTS版本的完整操作指南。针对机器人开发中ROS-noetic对Ubuntu20.04的官方最佳支持,详细阐述了从关键备份、软件源与APT优先级配置、系统降级执行到后续问题排查的全过程,并附带了在Arm64架构上成功安装和验证ROS-noetic的适配方案,旨在为开发者构建稳定可靠的机器人开发环境。

flower的专栏 580

ASP.net错误:Control 'ctl00_ctl00_ContentPlaceHolder2_ContentPlaceHolderRight_ListView1_ctrl0_DeleteBut...

表现: 当然也可能是另外一个什么控件必须放置在Form里边。 原因: 如果是普通情况,当然直接加一个Form就可以了,但如果是使用了master page,这个错误的真正原因是在master page中 ContentPlaceHolder被错误放置到<form>外面了: <form id="form1" runat="server"> &...

weixin_30399797的博客 409

DSP28377内存不够用?手把手教你合并RAM/FLASH块,解决CCS20链接器报错

本文详细介绍了在CCS20开发环境中解决DSP28377内存不足问题的方法,通过合并RAM/FLASH块优化CMD文件配置,有效解决链接器报错。文章包含内存布局对比、改写步骤、FreeRTOS集成注意事项及调试技巧,帮助开发者提升内存利用率与项目性能。

weixin_42524762的博客 143

Android 12 大屏时底下显示任务栏以及虚拟按键靠右问题

Android 12 点大屏时,底下导航栏变成显示任务栏,虚拟按键靠右的分析以及修改

Android系统开发笔记 4686

Page Title=““ Language=“C#“ MasterPageFile=“~/Site.Master“

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true"CodeBehind="Default.aspx.cs" Inherits="AppUI.Default" %> <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server"> </asp:Content> <asp:Co

xiexuzhao的专栏 698

5G 模组 FM650 USB模式查询及网络配置

完成以上配置后,5G模组可进行搜网,入网成功后,上位机获取 5G IP。

十年通信老兵的技术修炼之路——从3G到5G,从地面基站到卫星通信。 1323

ASP.NET MVC架构本质与实战落地指南

MVC(Model-View-Controller)是一种面向请求生命周期的Web应用架构模式,其核心在于解耦关注点、实现控制反转与契约化协作,而非简单的三层分层。它通过明确Model(领域契约与数据逻辑)、View(纯展示模板)和Controller(流程调度中心)的职责边界,显著提升代码可维护性、测试性与团队协作效率。在.NET生态中,MVC既支撑传统服务端渲染应用,也广泛用于BFF层、微服务网关等现代场景。本文结合WebForm迁移痛点、路由机制、依赖注入、验证体系与避坑实践,系统解析MVC的设计原理

xiang_fu的博客 427

TC3XX - MCAL知识点(三十五):Tasking编译器下,Tc3xx的MCAL代码如何使用多核,多核中断、多核任务、多核外设之间的MCAL配置与代码例程

文章用于记录在裸机情况下使用多核Tc387芯片,如何高效运行以及正确的代码、工程属性、链接文件配置等问题,相互结合、相互影响的地方,以示后续使用记录。

梦想技术家 962

Spring AI 实战:第五章、Spring AI本地模型部署之省钱小能手

白嫖的快乐你想象不到经过这番折腾,我们成功实现了零成本使用大模型完全本地运行保障隐私可视化访问Java生态无缝集成但可能有的小伙伴要吐槽,怎么换个底层模型这次就新建一个工程了呢?不能在以前的工程上开发吗?这样也太不优雅了吧~,我知道你很急,但先别急,等下一章节再来解决这个问题。为什么程序员特别喜欢Ollama?因为它就像一只温顺的羊驼——不花钱还能24小时产出代码!

liaokailin的专栏 922

为已有的 WebForm 项目引入 Asp.Net MVC 框架

Asp.Net 的项目多数还是应用的 WebForm 进行开发,MVC 框架随着在其他语言中的兴起,也进入了 Asp.Net 领域,那就是 Asp.Net MVC,现在的正式版本是 2.0,已经出了 3.0 Preview 版的。 WebForm 对于小项目的快速开发还是很

ddxkjddx的专栏 2183

嵌入式STM32F407CET6移植OpenHarmony系统方法

文件末尾添加:export PATH=~/gcc-arm-none-eabi-10-2020-q4-major/bin:$PATH。编译完成文件输出在LiteOs源码目录下out/STM32F407_ATK_Explorer文件夹中。②点击connect to the target,下方会自动显示识别出来的芯片型号以及flash大小。⑤点击program verify并点击start,等待烧写并校验完成,你就能看到程序正在运行了。,在选择刚才我们说的Huawei_LiteOS.hex文件。

嵌入式技术开发 546

TheBeerHouse模板学习笔记C2-网站界面设计

 Problem问题开发用户界面看起来是非常基本的任务,但是如果做的不好,你可能必须重新做几次,每次你修改基本面貌,都需要大量的重复劳动,更不用新整个新软的测试工作。更坏的是,如果你太忽视界面,可能会使用户失去访问的兴趣。所以要提供多种配色方案让用户自已选择。Design设计执行准则1、在IE和Firefox上能有一个能显示相同的好看的模板,一个能动态应用不同的配色方案和外

szg3827的专栏 699

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

为什么在asp.net2.0写出的程序的ID前会有ctl00?

看了看微软相关节点http://msdn2.microsoft.com/en-us/library/ms228268.aspx    在其中选择 Transitional、Strict则产生自动前缀ctl00选择 Legacy|则产生自动前缀_ctl0 

重典的博客 3029

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

MasterPage和Theme

关键字:MasterPage、ContentPlaceHolder、Theme/App_Themes、CSS、@ Page、ASP.NET页面生命周期、页面布局。 .ASPX,静态指定MasterPage和Theme <%@PageLanguage="C#"MasterPageFile="~/myMasterPage.master"Theme="myTheme" ...

weixin_30808575的博客 114

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

ASP.NET基础问题----使用随机字符串

有时候,我们需要产生一些随机字符串,这些字符串需要一定的长度,不能重复。产生的思路一般有两个:(1)使用随机数一个个的生成;(2)使用Hash函数生成;好在.net已经为我们准备好需要的东西。下面的这个方法就是生成一个随机字符串的: Shared Function RandomString() As String        产生随机字符串            Dim random1()

mint的专栏 1916

一个VB.NET的删除目录的模块

在上一个模块的基础上改了一下,花了几分钟。虽然简单,但是比较有用,就当是代码收集:    Public Sub DelDirectory(ByVal DirName As String)        If Not (Microsoft.VisualBasic.Right(destDirName, 1) = Path.DirectorySeparatorChar) Then       

mint的专栏 1734

一个VB.NET的目录复制模块

手上的东西需要一个目录复制,不过好久没有写程序,只好将就着将它写出来。目录复制无非是取文件,递归代码如下:Public Sub CopyDirectory(ByVal sourceDirName As String, ByVal destDirName As String)        If Not (Microsoft.VisualBasic.Right(destDirName,

mint的专栏 1688

VB.NET :Splash类与只许一个实例

需要书写一个程序的启动屏,在启动此屏时加载后台的代码,然后再显示它。如果自己写这个多线程的当然也行,问题是相当麻烦。于是在网上searching,结果在:http://lzmtw.cnblogs.com/archive/2005/11/08/271403.html处找到了代码.不过,我同样在另一个网页找到了其中需要修改的一处:Private Sub HideSplashScreen

mint的专栏 1624

ASP Forum2.0学习笔记之一---初识default.aspx

打开Defult.aspx,当场就傻了眼:主要内容如下所示:         晕,这个mp是什么东西?根据~/Themes/MasterPage.ascx这一线索找到themes目录下的masterpage.ascx文件.打开发现:  Default main content  这样的内容.先来看看,这个footer是什么东西吧.查找

mint的专栏 1445
上一篇: 一个用得着的查找文件(及目录)的方法
下一篇: DOJO入门(1)-Hello,World!
mint
博客等级 码龄26年 4粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值