zoukankan      html  css  js  c++  java
  • [转].NET生成静态页面并分页

    本文转自:http://www.cnblogs.com/Aspnet2007/articles/1230048.html

    因为公司的产品用asp开发, 前一段时间用asp写了一个生成静态页面并分页的程序,但缘于对.net的热爱,写了这个.net下的生成静态页面并分页的程序。

    主要的原理就是替换模板里的特殊字符。

    1、静态模板页面 template.html,主要是定义了一些特殊字符,用来被替换。

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>$Title</title>
    </head>
    <body>
        
    <div style=" 417px; height: 54px" align="center">
            
    <br />
        $Title
    </div>
        
    <div style=" 417px; height: 8px">
            浏览
    <font color="red"><script src="http://localhost/.Net/NewsFiles/ClickCount.aspx?NewsId=$NewsId"></script></font>次  $Time</div>
        
    <div style=" 417px; height: 100px">
            $Content
    </div>
        
    <div style=" 416px; height: 9px">
            $Pager
    </div>
        
    <div style=" 416px; height: 8px">
        
    <form id="form1" action="../AddComment.aspx" style="margin:0px">
            
    <input id="Text1" type="text" /><Img id="Image1" src="http://www.cnblogs.com/UserInfo/CheckCode.aspx"/><br />
            
    <textarea  id="CommentContent" cols="20" rows="2"></textarea>
            
    <br />
            
    <input id="NewsId" type="hidden" value="$NewsId"/>
            
    <input id="Button1" type="submit" value="button" />
            
    <href="../Display.aspx?NewsId=$NewsId">查看更多评论</a></form>
            
    </div>
    </body>
    </html>

    2、前台页面 NewsAdd.aspx,就是一个表单,用来填写新闻的标题和内容。

    <%@ Page Language="C#" AutoEventWireup="false" validateRequest="false" CodeFile="NewsAdd.aspx.cs" Inherits="NewsAdd.Admin_AdminPanel_NewsAdd" %>
    <%@ Register TagPrefix="FCKeditorV2" Namespace="FredCK.FCKeditorV2" Assembly="FredCK.FCKeditorV2" %>
    <!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>
            
    <asp:Label ID="Label2" runat="server" Text="标题"></asp:Label>
            
    <asp:TextBox ID="Title" runat="server" Width="325px"></asp:TextBox><br />
            
    <asp:Label ID="Label1" runat="server" Text="内容"></asp:Label>
        
    <FCKeditorV2:FCKeditor id="Content" basePath="~/FCKeditor/"  runat="server" Height="400px" Width="70%"></FCKeditorV2:FCKeditor>
            
    <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
            
    <asp:Label ID="Message" runat="server" ></asp:Label></div>
        
    </form>
    </body>
    </html>

    3、后台页面 NewsAdd.aspx.cs

    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using Mysqlserver;
    using System.IO;
    using System.Text;
    namespace NewsAdd
    {
        
    public partial class Admin_AdminPanel_NewsAdd : System.Web.UI.Page
        
    {
            
    protected void Page_Load(object sender, EventArgs e)
            
    {

            }

            
    protected void Button1_Click(object sender, EventArgs e)
            
    {
                
    string strDate = DateTime.Now.ToString("yyMMdd"+ "\" + DateTime.Now.ToString("yyyymmddhhmmss");
                
    string strFileName = strDate + ".shtml";//存储到数据库中
                string strTitle=Request.Form["Title"].ToString().Trim();//接收传过来的标题
                string strContent=Request.Form["Content"].ToString().Trim();//接收传过来的内容
                string[] content = strContent.Split(new Char[] {'|'});//对内容进行拆分,并保存到数组
                int upbound = content.Length;//数组的上限
                SqlServerDataBase db = new SqlServerDataBase();
                
    bool success = db.Insert("insert into inNews(Title,Content,FilePath)values('" + strTitle + "','" + strContent + "','" + strFileName + "')"null);
                
    //if (success)
                   
    // Message.Text = "添加成功!";
                ///////////////////////////创建当前日期的文件夹开始
                string dir = Server.MapPath("http://www.cnblogs.com/"+"NewsFiles/"+DateTime.Now.ToString("yyMMdd"));//用来生成文件夹
                if (!Directory.Exists(dir))
                
    {
                    Directory.CreateDirectory(dir);
                }

                
    ///////////////////////////创建当前日期的文件夹结束
                try
                
    {
                
    for (int i = 0; i < content.Length; i++)
                
    {
                
    //string[] newContent = new string[4];//定义和html标记数目一致的数组
                StringBuilder strhtml = new StringBuilder();

                    
    //创建StreamReader对象
                    using (StreamReader sr = new StreamReader(Server.MapPath("http://www.cnblogs.com/" + "NewsFiles/"+ "\template.html",Encoding.GetEncoding("gb2312")))
                    
    {
                        String oneline;
                        
    //读取指定的HTML文件模板
                        while ((oneline = sr.ReadLine()) != null)
                        
    {
                            strhtml.Append(oneline);
                        }

                        sr.Close();
                    }


                
    //为标记数组赋值
                
    //SqlServerDataBase db = new SqlServerDataBase();
                DataSet ds = db.Select("select top 1 NewsId from inNews order by NewsId desc"null);//获取id
                string strTable = "<table><tr><td>$upUrl</td><td>$Number</td><td>$downUrl</td></tr></table>";//上下页表格,注意此处的$upUrl(上一页),$Number(页码分页),$downUrl(下一页)
                
    //这三个是用来替换的。

                    
    string FilePath="";
                    strhtml 
    = strhtml.Replace("$Title", strTitle);
                    strhtml 
    = strhtml.Replace("$NewsId", ds.Tables[0].Rows[0]["NewsId"].ToString());
                    strhtml 
    = strhtml.Replace("$Time", DateTime.Now.ToString("yyyy/MM/dd"));
                    strhtml 
    = strhtml.Replace("$Content", content[i]);
                    
    string strNumber = "";//数字分页1,2,3……
                    for (int m = 1; m <=upbound; m++)
                    
    {
                        
    if (m == 1)//如果是第一页就显示成这个样子:20070524.shtml而不是20070524_1.shtml
                            strNumber = strNumber + " ["+"<a href=" + "../" + strDate + ".shtml" + ">" + m + "</a>"+"";
                        
    else
                        
    {
                            
    int n = m - 1;//第三页的连接应该是20070524_2.shtml,以此类推
                            strNumber = strNumber + " [" +"<a href=" + "../" + strDate + "_" + n + ".shtml" + ">" +  m + "</a>"+"";
                        }

                    }

                        
    if (upbound == 0)//如果没有分页,就直接按日期时间保存
                        {
                            FilePath 
    = Server.MapPath("http://www.cnblogs.com/"+ "NewsFiles" + "//" + strDate + ".shtml";
                            strhtml 
    = strhtml.Replace("$Pager""");
                        }

                        
    else//否则按20070524.shtml、20070524_1.shtml 这种效果保存
                        {
                            
    if (i == 0)
                                FilePath 
    = Server.MapPath("http://www.cnblogs.com/"+ "NewsFiles" + "//" + strDate + ".shtml";
                            
    else
                                FilePath 
    = Server.MapPath("http://www.cnblogs.com/"+ "NewsFiles" + "//" + strDate + "_" + i + ".shtml";
                            
                            
    if (i == 0)//第一页不显示上一页
                                strTable = strTable.Replace("$upUrl"""); 

                            
    if (i <= 1)//上一页分页
                                strTable = strTable.Replace("$upUrl""<a href=" + "../" + strDate + ".shtml" + ">上一页</a>");
                            
    else
                            
    {
                                
    int p = i - 1;
                                strTable 
    = strTable.Replace("$upUrl""<a href=" + "../" + strDate + "_" + p + ".shtml" + ">上一页</a>");
                            }

                            
                            
    if(upbound==1)//如果只有一页,则不显示页码
                            
    //strNumber="";
                            strTable = strTable.Replace("$Number""");
                            
    else
                            strTable 
    = strTable.Replace("$Number", strNumber);//页码替换
                            ////////////////////////
                            if(i==upbound-1)//最后一页不显示下一页
                                strTable = strTable.Replace("$downUrl""");

                            
    if (i != upbound - 1)//下一页分页
                            {
                                
    int q = i + 1;
                                strTable 
    = strTable.Replace("$downUrl""<a href=" + "../" + strDate + "_" + q + ".shtml" + ">下一页</a>");
                            }

                            
    else
                            
    {
                                
    int j = upbound - 1;
                                strTable 
    = strTable.Replace("$downUrl""<a href=" + "../" + strDate + "_" + j + ".shtml" + ">下一页</a>");
                            }


                            strhtml 
    = strhtml.Replace("$Pager", strTable);
                        }

                    
    //创建文件信息对象--------------------------------------------
                    FileInfo finfo = new FileInfo(FilePath);
                    
    //以打开或者写入的形式创建文件流
                    using (FileStream fs = finfo.OpenWrite())
                    
    {
                        
    //根据上面创建的文件流创建写数据流
                        StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default);
                        
    //把新的内容写到创建的HTML页面中
                        sw.WriteLine(strhtml);
                        sw.Flush();
                        sw.Close();
                    }

                }

            }

            
    catch (Exception err)
            
    {
                
    //输出异常信息
                Response.Write(err.ToString());
            }

            }

    }

    }

  • 相关阅读:
    leetcode 1301. 最大得分的路径数目
    LeetCode 1306 跳跃游戏 III Jump Game III
    LeetCode 1302. 层数最深叶子节点的和 Deepest Leaves Sum
    LeetCode 1300. 转变数组后最接近目标值的数组和 Sum of Mutated Array Closest to Target
    LeetCode 1299. 将每个元素替换为右侧最大元素 Replace Elements with Greatest Element on Right Side
    acwing 239. 奇偶游戏 并查集
    acwing 238. 银河英雄传说 并查集
    acwing 237程序自动分析 并查集
    算法问题实战策略 MATCHORDER 贪心
    Linux 安装Redis全过程日志
  • 原文地址:https://www.cnblogs.com/freeliver54/p/2938874.html
Copyright © 2011-2022 走看看