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

简介: //模版页面.html 链接1链接2链接3 //Template类 using System;using System.

//模版页面.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

可结合使用。




相关文章
|
6月前
|
开发框架 JavaScript 前端开发
揭秘:如何让你的asp.net页面变身交互魔术师——先施展JavaScript咒语,再引发服务器端魔法!
【8月更文挑战第16天】在ASP.NET开发中,处理客户端与服务器交互时,常需先执行客户端验证再提交数据。传统上使用ASP.NET Button控件直接触发服务器事件,但难以插入客户端逻辑。本文对比此法与改进方案:利用HTML按钮及JavaScript手动控制表单提交。后者通过`onclick`事件调用JavaScript函数`SubmitForm()`来检查输入并决定是否提交,增强了灵活性和用户体验,同时确保了服务器端逻辑的执行。
72 5
|
9月前
|
开发框架 .NET 中间件
七天.NET 8操作SQLite入门到实战 - (2)第七天Blazor班级管理页面编写和接口对接
七天.NET 8操作SQLite入门到实战 - (2)第七天Blazor班级管理页面编写和接口对接
190 7
|
9月前
|
开发框架 缓存 前端开发
利用Visual Basic构建高效的ASP.NET Web应用
【4月更文挑战第27天】本文探讨使用Visual Basic与ASP.NET创建高效Web应用的策略,包括了解两者基础、项目规划、MVC架构、数据访问与缓存、代码优化、异步编程、安全性、测试及部署维护。通过这些步骤,开发者能构建出快速、可靠且安全的Web应用,适应不断进步的技术环境。
127 0
|
6月前
|
开发框架 前端开发 .NET
七天.NET 8操作SQLite入门到实战 - (3)第七天Blazor学生管理页面编写和接口对接
七天.NET 8操作SQLite入门到实战 - (3)第七天Blazor学生管理页面编写和接口对接
|
7月前
|
开发框架 搜索推荐 前端开发
【.NET全栈】ASP.NET开发Web应用——Web部件技术
【.NET全栈】ASP.NET开发Web应用——Web部件技术
|
6月前
|
开发框架 .NET 开发工具
【Azure 应用服务】App Service 的.NET Version选择为.NET6,是否可以同时支持运行ASP.NET V4.8的应用呢?
【Azure 应用服务】App Service 的.NET Version选择为.NET6,是否可以同时支持运行ASP.NET V4.8的应用呢?
|
6月前
|
开发框架 监控 .NET
【Azure 应用程序见解】在Docker中运行的ASP.NET Core应用如何开启Application Insights的Profiler Trace呢?
【Azure 应用程序见解】在Docker中运行的ASP.NET Core应用如何开启Application Insights的Profiler Trace呢?
|
8月前
|
开发框架 前端开发 .NET
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
集成于VS 2019,EXT.NET前端和ASP.NET后端,搭配MSSQL 2018数据库。系统覆盖样品管理、数据分析、报表和项目管理等实验室全流程。应用广泛,包括生产质检(如石化、制药)、环保监测、试验研究等领域。随着技术发展,现代LIMS还融合了临床、电子实验室笔记本和SaaS等功能,以满足复杂多样的实验室管理需求。
96 3
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
|
6月前
|
开发框架 .NET API
如何在 ASP.NET Core Web Api 项目中应用 NLog 写日志?
如何在 ASP.NET Core Web Api 项目中应用 NLog 写日志?
290 0

热门文章

最新文章