这个功能是在DTcms Demo网站里面扣出来的一个小功能,他的Demo网站里面可以在HTML写好所有的代码,然后生成一下ASPX页面,就可以访问了。具体的流程下篇文章来分析。这篇文章主要是讲HTML如何生成ASPX页面。

原理:

我们先读取HTML页面,然后拼接字符串(组成ASPX页面的结构的字符串),然后创建ASPX页面把字符串利用File操作写进ASPX页面。

例如:

我们要生成的ASPX页面的结构大致如下(截图是最简单的,没有涉及数据的交互,只是静态字符串)

静态页面:

生成ASPX页面代码如下

      //需要生成ASPX页面的静态页面
string templetFullPath = HttpContext.Current.Server.MapPath("/Html/Test.html");
//读取静态文件
using (StreamReader objReader = new StreamReader(templetFullPath, Encoding.UTF8))
{
StringBuilder textOutput = new StringBuilder();
textOutput.Append(objReader.ReadToEnd()); //把文件读取到StringBuilder中 string oldStr = textOutput.ToString();
string newStr = "";
newStr = oldStr;

//重点
//替换特殊标记
newStr = newStr.Replace("\r\n","\\r\\n");

newStr = newStr.Replace("\"", "\\\"");
            //我们把 </script> 整个写到 tempplateBulder 里面无法正确显示,需要拆分开, 写到两个Append()里面
newStr = newStr.Replace("</script>", "</\");\r\n\ttemplateBuilder.Append(\"script>");

StringBuilder sbStr = new StringBuilder();
//添加页面头部 Inherits 这个属性的值必须对应正确
sbStr.AppendFormat("<%@ Page Language =\"C#\" AutoEventWireup=\"true\" Inherits=\"{0}\" ValidateRequest=\"false\" %>\r\n", "DTcmsTest.Test");
//命名空间 根据页面需求自己添加 用到一些的命名空间,也可以在对应的*.cs文件里面引用
sbStr.Append("<%@ Import namespace=\"System.Text\" %>\r\n");
//添加可以写后台代码的脚本
sbStr.Append("<script runat =\"server\">\r\nprotected override void OnInit(EventArgs e)\r\n");
sbStr.Append("{ \r\n\r base.OnInit(e);\r\n\t"); //基本上就这段代码是动态的,其他的都是一样的
//利用StringBuilder输出页面 先把HTML全部读取到StringBuilder里面然后在输出
sbStr.AppendFormat("StringBuilder templateBuilder = new StringBuilder({0});\r\n\t",textOutput.Capacity);
sbStr.AppendFormat("templateBuilder.Append(\"{0}\");\r\n\t", newStr); sbStr.Append("Response.Write(templateBuilder.ToString());\r\n }\r\n");
sbStr.Append("</script>\r\n");
string pageDir = HttpContext.Current.Server.MapPath("/HTML");
string outputPath = pageDir + "\\Test.aspx"; //生成文件的物理路径
//如果物理路径不存在则创建
if (!Directory.Exists(pageDir))
{
Directory.CreateDirectory(pageDir);
}
           //重点
//保存写入文件
File.WriteAllText(outputPath, sbStr.ToString(), Encoding.UTF8); context.RewritePath("/HTML/Test.aspx");

生成ASPX页面的字符串注意点:

我们是利用File创建一个ASPX页面,然后进入写入数据的,它会识别一些特殊的标记。

列如:

我们写了一些带特殊符号的字符串,利用File写入文件

我们需要在后台代码中输出一开始获取的HTML页面数据,不能破坏,所以才需要替换

如果我们需要写后台代码,我们新建一个*.cs文件,名字跟ASPX页面一样,然后让类继承 Page就可以了。

这里说的只是原理,没有涉及到数据交互。

HTML页面生成ASPX页面的更多相关文章

  1. HTML控件ID和NAME属性及在CS页面获得.ASPX页面中HTML控件的值

    <转载>来自网络 一.ID是在客户端脚本里用!NAME是用于获取提交表单的某表单域信息,在form里面,如果不指定Name的话,就不会发送到服务器端,所以有name属性的控件,必须指定na ...

  2. hexo 静态页面生成后页面打不开的问题

    我这里的原因是4000端口被占用了 *** hexo入门指南教程: 官方文档 用Hexo 3 搭建github blog 做一款hexo主题(进阶) 坑 1 要安装node和git 2 别忘了安装he ...

  3. aspx页面调用发送邮件验证码(结合前两篇)

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs ...

  4. aspx页面图片用作html中img的url

    背景:如果无法直接访问保存图片的服务器,我们可以先制作一个aspx页面用来接受服务器发送过来的图片,然后html页面请求aspx页面.对图片服务器起一定的缓冲保护作用,预防对黑客攻击造成危害. 注意: ...

  5. [转]把动态页面.aspx 生成静态页面.html

    本文转自:http://blog.csdn.net/csb5201314/article/details/5391688 如果要把主页Index.aspx 生成静态页面 Index.html后输出会提 ...

  6. 关于aspx 页面生成html 源码顶部空行不得不说的事儿

    原文引用自 http://www.360doc.com/content/12/0910/21/10504424_235418578.shtml 使用.aspx生成的页面一般都会有一个或多个空行,当然这 ...

  7. .NET生成静态页面并分页

    因为公司的产品用asp开发, 前一段时间用asp写了一个生成静态页面并分页的程序,但缘于对.net的热爱,写了这个.net下的生成静态页面并分页的程序. 主要的原理就是替换模板里的特殊字符. 1.静态 ...

  8. .net 生成 静态页面

    .net 生成 静态页面 <!--Main.Aspx--> <%@ page language="C#" %> <%@ import namespac ...

  9. ASP.NET ashx实现无刷新页面生成验证码

    现在大部分网站登陆时都会要求输入验证码,在网上也看了一些范例,现在总结一下如何实现无刷新页面生成验证码. 效果图: 实现方式: 前台: <div> <span>Identify ...

随机推荐

  1. C# 通过 Hessian服务调用java

    1.下载Hessiancsharp.dll 2.新建一个c#窗体程序,然后在添加一个类库 3.添加一个接口类,接口中的方法名和参数与java中的服务方法名和参数保持一致 public partial ...

  2. 数据库版本管理工具flyway

    引入flyway_core  jar包 java 代码实现 public class FlywayMigration { @Resource private DataSource dataSource ...

  3. HBuilder的常用快捷键

    Ctrl + d 删除整行内容 Ctrl + Shift +R 复制当前行到下一行 Ctrl + Shift +D 重新编辑 Ctrl + 方向键 当前行整行内容上移或下移 Alt + ↓ 跳转到下一 ...

  4. eclipse把局部变量提为全局变量的快捷键是什么

    没有缺省定义的直接快捷键,或者就按Ctrl+1按照melord说的那样做,或者自己在Preference/General/Keys自己对Convert Local Variable to Feild进 ...

  5. 性能测试工具Jmeter07-Jmeter性能测试实战

    测试需求:测试20个用户访问www.baozhenart.com在负载达到30QPS时的平均响应时间 QPS:Query Per Second每秒查询率.是一台查询服务器每秒能够处理的查询次数.在因特 ...

  6. GitKraken使用教程-基础部分(7)

    8.  本地分支和标签 1) 在提交记录区中查看分支状态 提交记录区中每一个分支都位于一个提交记录所在的行中. 从图 2‑1中可以看到,服务器上的master分支停留在整理格式(把这个提交记录记为or ...

  7. 创建Graphics对象与Pen对象

    Graphics对象表示GDI+绘图表面,是用于创建图形图像的对象,所以要通过GDI+创建绘图,必须先创建Graphics对象,然后才可以使用GDI+的笔.刷等结合颜色.字体等对象进行绘制线条形状.填 ...

  8. 乐蜂网SALES倒计时原码展示

    这是一个基于jquey写的倒计时.当然代码有点小改动,只是改了一下展示效果. 在静态页添加显示倒计时的容器,并引用下面脚本,代入时间参数即可使用. timeoutDate——到期时间,时间格式为201 ...

  9. DOM 事件冒泡

    1.什么是事件冒泡? 事件冒泡就是从具体到不具体, 例如:当你给了一个button按钮一个点击事件,再给他的父级相同的事件,就会按照,button,body,document,window,继续向上冒 ...

  10. 在IE中解决当前安全设置不允许下载该文件的方案

    解决方案一: 1.0打开IE后,单击菜单栏中的“工具”菜单,在弹出的菜单中选择“Internet选项”命令: 2.0在弹出“Internet选项”的对话框中,打开“Internet选项”对话框: 3. ...