asp.net模版页面的高级应用

//模版页面.html

<!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>
    <title></title>
</head>
<body>
<a href="#">链接1</a><br/>
<a href="#" id="link2" runat="server">链接2</a><br/>
<a href="#">链接3</a>
</body>
</html>

//Template类

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.IO;
using System.Text.RegularExpressions;
using System.Text;

namespace testweb
{
    public class Template
    {
        #region 绑定模版到页面
        /// <summary>
        /// 绑定模版到页面
        /// </summary>
        /// <param name="SourcePage"></param>
        /// <param name="PageName"></param>
        public static void BindTemplateToPage(Page SourcePage, string PageName)
        {

            string templatepath = PageName;
            if (templatepath != null && templatepath != "")
            {
                string TemplateContent = GetTemplate(templatepath);

                BindTextToPage(SourcePage, TemplateContent);
            }
        }
        #endregion

        #region 根据模板路径读取模板内容
        /// <summary>
        /// 根据模板路径读取模板内容
        /// </summary>
        /// <param name="TemplatePath">模板(相对站点根)路径</param>
        /// <returns>返回 string</returns>
        public static string GetTemplate(string TemplatePath)
        {
            string m_path = HttpContext.Current.Server.MapPath("~/");

            m_path = m_path + TemplatePath;
            string str;
            Encoding code = Encoding.GetEncoding(0);
            StreamReader sr = null;

            try
            {
                sr = new StreamReader(m_path, code);
                str = sr.ReadToEnd();
                sr.Close();
            }
            catch (Exception e)
            {
                throw new Exception(e.Message.ToString());
            }

            str = RepaceRequest(str);
            return str;
        }
        #endregion

        #region 替换Url请求标签
        /// <summary>
        /// 替换Url请求标签
        /// </summary>
        /// <param name="temstr"></param>
        /// <returns></returns>
        public static string RepaceRequest(string temstr)
        {
            String Pattern = @"{@(.*?)}";
            MatchCollection Matches = Regex.Matches(temstr, Pattern, RegexOptions.IgnoreCase
           | RegexOptions.IgnorePatternWhitespace | RegexOptions.ExplicitCapture);
            if (Matches.Count > 0)
            {
                for (int i = 0; i < Matches.Count; i++)
                {
                    int m_length = Matches[i].Value.Length - 3;
                    string ParterName = Matches[i].Value.Substring(2, m_length).Trim();
                    string ParterValue = HttpContext.Current.Request[ParterName];
                    if (ParterValue == null)
                    {
                        ParterValue = "";
                    }
                    else
                    {
                        try
                        {
                            Int32.Parse(ParterValue);
                        }
                        catch
                        {
                            ParterValue = "";
                        }
                    }
                    temstr = temstr.Replace(Matches[i].Value, ParterValue.ToString().Trim());
                }
                //temstr = temstr.Replace("剩余时间", "距开始时间");
                return temstr;
            }
            else
                return temstr;
        }
        #endregion

        #region 绑定模版到页面(直接输入模版)
        /// <summary>
        /// 绑定模版到页面(直接输入模版)
        /// </summary>
        /// <param name="SourcePage"></param>
        /// <param name="PageName"></param>
        public static void BindTextToPage(Page SourcePage, string TemplateContent)
        {
            Control MyTemplateControl = new Control();
            try
            {
                MyTemplateControl = SourcePage.ParseControl(TemplateContent);
            }
            catch (Exception ex)
            {
                throw ex;
            }

            SourcePage.Controls.Add(MyTemplateControl);
        }
        #endregion
    }
}

//测试页面代码

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="testDemo.aspx.cs" Inherits="testweb.testDemo" %>

<!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>
    <br/><a href="#" id="pagelink1" runat="server" >页面链接</a>
    </div>
    </form>
</body>

//测试页面后台

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Html=System.Web.UI.HtmlControls;
namespace testweb
{
    //Page_Init在Page_Load前执行
    public partial class testDemo : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Html.HtmlAnchor link2 = (Html.HtmlAnchor)Page.FindControl("link2");
            Response.Write(link2.InnerHtml);
            link2.Visible = false;
        }
        protected void Page_Init(object sender, EventArgs e)
        {
            Template.BindTemplateToPage(this, "/模版页面.html");
        }
    }
}

结果:

这个是直接在本页面输出,还能用runat="server"的控件 ,

附:生成静态页方法

http://blog.sina.com.cn/s/blog_6439f26f0100zhn7.html

可结合使用。

时间: 2024-10-23 21:36:59

asp.net模版页面的高级应用的相关文章

在asp.cs的页面中 如何弹出一个模态窗口 然后一秒后自动关闭 ()

问题描述 在asp.cs的页面中 如何弹出一个模态窗口 然后一秒后自动关闭 () 如题,在asp.cs的页面中 如何弹出一个模态窗口 然后一秒后自动关闭 (求高手指教) 解决方案 http://www.3lian.com/edu/2013/05-22/71072.html

代码-ASP.NET登陆页面时如何查询SQL Sever数据库中用户名和密码是否相匹配

问题描述 ASP.NET登陆页面时如何查询SQL Sever数据库中用户名和密码是否相匹配 小弟是个新手,想请教下ASP.NET中如何通过TextBox控件去查询SQL Sever数据库中用户名和密码是否相匹配.求完整的代码,谢谢各位前辈! 解决方案 string connect = ""Provider=Microsoft.Jet.OleDb.4.0;Data Source=|DataDirectory|contacts.mdb"";string query =

IIS处理asp.net请求和asp.net的页面生命周期

当一个客户端页面访问IIS试图获取一些信息的时候,发生了什么事情?一个请求在通过了HTTP管道后又发生了什么?本文主要是描述这两个过程,即IIS处理asp.net请求和asp.net的页面生命周期.欢迎大家积极拍砖,共同学习,共同进步. 首先我们要弄清楚两个非常重要的概念: 1, worker process(w3wp.exe). worker process管理所有的来自客户端的请求并给出响应.它是IIS下asp.net应用程序的核心. 2, application pool. 它是worke

ASP获取当前页面带参数的网址(URL地址)的方法

ASP获取当前页面带参数的网址(URL地址)的方法 以下是引用片段:'=========================================== '获取当前Url参数的函数 Function GetUrl()   Dim ScriptAddress,Servername,qs   ScriptAddress = CStr(Request.ServerVariables("SCRIPT_NAME"))   Servername = CStr(Request.ServerVar

ASp.NET教程:页面传值的五种方法

ASP.NET跨页面传值技巧总结 关于页面传值的方法,引发了很多讨论.看来有很多人关注这个,我就我个人观点做了些总结,希望对大家有所帮助. 1.  使用QueryString变量 QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中.如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法.但是对于传递数组或对象的话,就不能用这个方法了.下面是一个例子: a.aspx的C#代码 private void Button1_Click(object

ASP建立WEB页面计数器

web|计数器|页面 用ASP建立WEB页面的计数器通常有两种简单的方法,一个是建立global.asa,另外一个是直接写一个ASP文件来进行计数.一般使用一个文档来保存浏览数量.    1.用global.asa来写计数器写一个global.asa文件,存放到虚拟目录的根目录下面,源代码如下:    <Script language ="Vbscript" Runat="server"> sub Application_onStart()  count

Asp.net多页面间保留状态

asp.net|页面 前言今天是,我新工作的第二天,终于回到Csdn上,在自己的Blog上写上第一篇文章.不记得自己有几个Blog了,今天开始决定,在这里记录下,我以后的日子与生活吧.Asp.net多页面间保留状态只记得Asp.net页面内的状态是由Viewstate来保存的.我想页面间是不是也可以借用Viewstate.微软说,Viewstate只是相对于单页面来说的,并且,我还发现了,有好多的工作可以反编辑页面内的Viewstate.因为它是用Base64编码的.当然也可以对它加密.既然,它

使用模板实现ASP代码与页面分离

模板|页面 使用模板实现ASP代码与页面分离 每个进行过较大型的ASP-Web应用程序设计的开发人员大概都有如下的经历:ASP代码与页面HTML混淆难分,业务逻辑与显示方式绞合,使得代码难以理解.难以修改:程序编写必须在美工之后,成为项目瓶颈:整合的程序代码和HTML静态页面时,花费大量的时间才能得到理想的效果,兼作了美工.的确,用脚本语言开发Web应用不容易将数据的处理和数据的显示分开,但在多人合作的情况下,如果无法将数据和显示分开,将大大影响开发的效率,专业分工的发挥. 其它的脚本语言,如J

asp.net WebForm页面间传值方法

asp.net|web|页面 ASP.NET WEB FORMS 给开发者提供了极好的事件驱动开发模式.然而这种简单的应用程序开发模式却给我们带来了一些小问题,举个例子,在传统的ASP应用程序中,你能够通过POST方法很容易的把一个值或多个值从一个页面传送到另一个页面(request()/request.form()/request.querystring()),用同样的方法在ASP.NET中实现有点麻烦.在这里,通过其他方式来解决这种情形.ASP.NET为我们提供了三种方式,一种是可以通过用Q