HTML页面生成ASPX页面

这个功能是在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(70000);
                    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就可以了。

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

时间: 2024-08-26 16:46:46

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

jsp 页面生成静态页面(调包response)

过滤器 package cn.itcast.web.filter; import java.io.File; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRe

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

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DT

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

背景:如果无法直接访问保存图片的服务器,我们可以先制作一个aspx页面用来接受服务器发送过来的图片,然后html页面请求aspx页面.对图片服务器起一定的缓冲保护作用,预防对黑客攻击造成危害. 注意:不可以是直接设置aspx页面中的图片控件的imageurl,此方法已实验不成功. 1. showpic.aspx页面 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="showpic.as

aspx页面中用Input 标签实现上传图片功能

实现上传图片功能需单独的建立一个aspx页面, 其中前台页面需要注意两点: a)实现上传功能的input的type="file" b)设置请求报文头为 enctype="multipart/form-data" 类型 前台代码如下: <form method="post" enctype="multipart/form-data"> <table class="list"> <

C#根据网址生成静态页面

HoverTree开源项目中HoverTreeWeb.HVTPanel的Index.aspx文件 是后台管理的首页. 包含生成留言板首页,以及显示用户名,退出等功能. 根据网址生成页面的方法: bool CreateHtmlFile(string url, string path) { //http://keleyi.com/a/bjae/3d10wfax.htm string m_content = Utils.GetHtmlByUrl(Utils.GetAbsolutePath() + ur

artdialog 异步加载页面 生成验证码

artdialog  异步加载一个页面 需求:例如现在好多网站的登录或注册 都是点击弹出一个层出来 然后在上面登录.注册 这个登录可能在网站的每个页面都会有,但是我们又不能在每个页面都这一段html加载出来不显示,到需要用的时候,在给shou出来,这样做于情于理都说!不!!过!!!去!!!!!! 恰好以前接触过artdialog  不多说上代码,(注意思维,代码是死的方法是活,解决需求不一定非要这个方法 ) 1.页面html代码 1 <head runat="server">

Asp.net 生成静态页面

第一次发表,有什么错误,请大家谅解噢! 如果不明白的话,建议自己拷一次. 就会的了.. 开发步骤: 1.路径映射类(UrlMapping),主要对路径进行拆分.拼接.(关键的一步) 2.过滤流类(FilterStream),主要负责生成静态页面. 3.静态页面类(HtmlPage),主要是调用UrlMapping和FilterStream类, 哪个页面想静态化,就继承这个类. 4.HtmlHandler类,路径后缀为Html的,都由它来处理,与HtmlPage类相似. 5.HtmlPanel类(

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

现在大部分网站登陆时都会要求输入验证码,在网上也看了一些范例,现在总结一下如何实现无刷新页面生成验证码. 效果图: 实现方式: 前台: 1 <div> 2 <span>Identifying Code:</span> 3 <asp:TextBox ID="txtValidationCode" runat="server" Width="130px" MaxLength="4">&

Java项目生成静态页面

第一次做项目需要生成静态页面,网上很多大牛对将网页生成静态页面有很多异议.说一下我的看法. 不外乎有以下因素: 1.从页面加载时间来看:静态页面不需要与数据库建立连接,尤其是访问数据量较大的页面,这种页面大多要查很多结果集,因此建立连接次数就增多了,时间不可观,而静态页面则省去了这些时间. 2.从便于搜索引擎抓取的角度来讲:搜索引擎更喜欢静态的网页,静态网页与动态网页相比,搜索引擎更喜欢静的,更便于抓取,搜索引擎SEO排名更容易提高,一些大门户站页面大多都采用静态或伪静态网页来显示,更便于搜索引