手动分页我已经实现,是手动插入分页符号$page$
但是自动分页还没有实现
我是想在多少个字符串后面加个$page$,但是不要隔开html标记,还要保留html标记!

解决方案 »

  1.   

    最好是判断字符长度的左右没有有,</p>在这个后面家个$page$
      

  2.   

    还有如果想用分页 还有个控件比较好,aspnetpager
      

  3.   

    using System;
    using System.Data;
    using System.Configuration;
    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 System.ComponentModel;namespace _GNewsSysWeb
    {
        [DefaultProperty("Text")]
        [ToolboxData("<{0}:PagerControl runat=server></{0}:PagerControl>")]
        public class PagerControl : WebControl
        {        private int currentPage;                    // 当前页的页码
            private int pageCount;                      // 总页数        private bool showPrevious = false;      // 是否显示 上一页、第一页 的链接
            private bool showNext = false;          // 是否显示 下一页、最末页 的链接        private int startPage;                      // 显示的第一页 的 页码
            private int endPage;                            // 显示的最末页 的 页码        public PagerControl()
            {
                // 当前页之前可以显示的最多链接数,大于此条链接将被隐藏
                ViewState["PreviousPageCount"] = 5;            // 当前页之后可以显示的最多链接数,大于此条链接将被隐藏
                ViewState["AfterPageCount"] = 4;            // 供客户端设置样式
                ViewState["CssClass"] = "Pager";
            }        public new string CssClass
            {
                get { return ViewState["CssClass"].ToString(); }
                set { ViewState["CssClass"] = value; }
            }        public int PreviousPageCount
            {
                get { return (int)ViewState["PreviousPageCount"]; }
                set { ViewState["PreviousPageCount"] = value; }
            }        public int AfterPageCount
            {
                get { return (int)ViewState["AfterPageCount"]; }
                set { ViewState["AfterPageCount"] = value; }
            }        public UrlManager UrlManager
            {
                get { return (UrlManager)ViewState["UrlManager"]; }
                set { ViewState["UrlManager"] = value; }
            }        // 添加“第一页”,“上一页”的连接
            private void AddPreviousLink(UrlManager UrlManager, HtmlTextWriter output)
            {            output.AddAttribute(HtmlTextWriterAttribute.Class, "PagerIcon");
                output.AddAttribute(HtmlTextWriterAttribute.Title, "第一页");
                output.AddAttribute(HtmlTextWriterAttribute.Href, UrlManager.GetPageUrl(1));
                output.RenderBeginTag(HtmlTextWriterTag.A);
                output.Write("&lt;&lt;");
                output.RenderEndTag();            output.AddAttribute(HtmlTextWriterAttribute.Class, "PagerIcon");
                output.AddAttribute(HtmlTextWriterAttribute.Title, "上一页");
                output.AddAttribute(HtmlTextWriterAttribute.Href, UrlManager.GetPageUrl(currentPage - 1));
                output.RenderBeginTag(HtmlTextWriterTag.A);
                output.Write("&lt;");
                output.RenderEndTag();            showPrevious = false;   // 只显示一次
            }
            // 添加 “下一页”、“最末页” 的链接
            private void AddNextLink(UrlManager UrlManager, HtmlTextWriter output)
            {            output.AddAttribute(HtmlTextWriterAttribute.Class, "PagerIcon");
                output.AddAttribute(HtmlTextWriterAttribute.Title, "下一页");
                output.AddAttribute(HtmlTextWriterAttribute.Href, UrlManager.GetPageUrl(currentPage + 1));
                output.RenderBeginTag(HtmlTextWriterTag.A);
                output.Write("&gt;");
                output.RenderEndTag();            output.AddAttribute(HtmlTextWriterAttribute.Class, "PagerIcon");
                output.AddAttribute(HtmlTextWriterAttribute.Title, "最末页");
                output.AddAttribute(HtmlTextWriterAttribute.Href, UrlManager.GetPageUrl(pageCount));
                output.RenderBeginTag(HtmlTextWriterTag.A);
                output.Write("&gt;&gt;");
                output.RenderEndTag();            showNext = false;   // 可有可无,程序会跳出循环
            }
            // 根据当前页,当前页之前可以显示的页数,算得从第几页开始进行显示
            private void SetStartPage()
            {            // 如果当前页小于它前面所可以显示的条目数,
                // 那么显示第一页就是实际的第一页
                if (currentPage <= PreviousPageCount)
                {
                    startPage = 1;
                }
                else
                // 这种情况下 currentPage 前面总是能显示完,
                // 要根据后面的长短确定是不是前面应该多显示
                {
                    if (currentPage > PreviousPageCount + 1)
                        showPrevious = true;                int linkLength = (pageCount - currentPage + 1) + PreviousPageCount;                int startPage = currentPage - PreviousPageCount;                while (linkLength < PreviousPageCount + AfterPageCount + 1 && startPage > 1)
                    {
                        linkLength++;
                        startPage--;
                    }                this.startPage = startPage;
                }
            }        // 根据CurrentPage、总页数、当前页之后长度 算得显示的最末页是 第几页
            private void SetEndPage()
            {
                // 如果当前页加上它之后可以显示的页数 大于 总页数,
                // 那么显示的最末页就是实际的最末页
                if (currentPage + AfterPageCount >= pageCount)
                {
                    endPage = pageCount;
                }
                else
                {                // 这种情况下 currentPage后面的总是可以显示完,
                    // 要根据前面的长短确定是不是后面应该多显示                int linkLength = (currentPage - startPage + 1) + AfterPageCount;                int endPage = currentPage + AfterPageCount;                while (linkLength < PreviousPageCount + AfterPageCount + 1 && endPage < pageCount)
                    {
                        linkLength++;
                        endPage++;
                    }                if (endPage < pageCount)
                        showNext = true;                this.endPage = endPage;
                }
            }
            // 显示在页面上
            protected override void Render(HtmlTextWriter output)
            {            output.AddAttribute(HtmlTextWriterAttribute.Class, CssClass);
                output.RenderBeginTag(HtmlTextWriterTag.Div);            if (UrlManager == null)
                    throw new ArgumentNullException("UrlManager 不能为 Null");            // 获取当前页
                currentPage = UrlManager.CurrentPageIndex;            // 获取总页数
                pageCount = UrlManager.PageCount;            SetStartPage();
                SetEndPage();            // 循环打印链接
                for (int i = startPage; i <= endPage; i++)
                {
                    if (showPrevious)           // 如果需要显示前一页、第一页链接
                        AddPreviousLink(UrlManager, output);
                    if (i == currentPage)
                    {
                        output.AddAttribute(HtmlTextWriterAttribute.Class, "CurrentPage");
                    }                output.AddAttribute(HtmlTextWriterAttribute.Href, UrlManager.GetPageUrl(i));
                    output.RenderBeginTag(HtmlTextWriterTag.A);
                    output.Write(i);
                    output.RenderEndTag();  // A                if (i == endPage && showNext)   // 如果需要显示 下一页、最末页 链接
                        AddNextLink(UrlManager, output);
                }            output.RenderBeginTag(HtmlTextWriterTag.Span);
                output.Write(String.Format(" ( 第<b>{0}</b>页/共<b>{1}</b>页 )", currentPage, pageCount));
                output.RenderEndTag();  // Span            output.RenderEndTag();  // Div
            }    }
    }
      

  4.   

    保留html标记,还是用手动添加分页标识
    或通过正则获取HTML标记,替换为分隔符
      

  5.   

    还是手动吧
    自动的话,不是很职能的
    如果漏掉一个HTML不闭合的话,就有可能变形的
      

  6.   

    我在网上找了段代码,可以实现自动插入标识符,之后在前端实现标识符分页!高手帮看看CheckPagination方法的问题所在    /// <summary>
        /// 插入分割标签
        /// </summary>
        /// <param name="strText">打算插入标签的内容</param>
        /// <param name="maxPagesize">自动插入标签的最大字符长度</param>
        /// <param name="Pagebreak">分页符</param>
        /// <returns></returns>
        private static string InsertPageBreak(string strText, int maxPagesize, string Pagebreak)
             {
                 if (maxPagesize == 0 || string.IsNullOrEmpty(strText) || strText.IndexOf(Pagebreak) != -1) return strText;
                 string s = strText;
                 int sl = s.Length;
                 bool IsCount = true;
                 string Temp_String = "";
                 string strTemp = "";
                 string c = "";
                 int iCount = 0;
                 string[] Temp_Array;
                 string ss = "";
                 if (sl < Int32.Parse((maxPagesize + maxPagesize / 3).ToString()))
                 {
                     return s;
                 }
                 s = s.Replace(" ", "< >");
                 s = s.Replace(">", "<>>");
                 s = s.Replace("<", "<<>");
                 s = s.Replace(""", "<">");
                 s = s.Replace("'", "<'>");
                 IsCount = true;
                 Temp_String = "";             for (int i = 0; i < sl; i++)
                 {
                     c = s.Substring(i, 1);
                     if (c == "<")
                     {
                         IsCount = false;
                     }
                     else if (c == ">")
                     {
                         IsCount = true;
                     }
                     else
                     {
                         if (IsCount)
                         {
                             if (System.Text.RegularExpressions.Regex.IsMatch(c, "[\u4e00-\u9fa5]", System.Text.RegularExpressions.RegexOptions.IgnoreCase))
                             {
                                 iCount += 2;
                             }
                             else
                             {
                                 iCount += 1;
                             }
                             if (iCount > maxPagesize && i < sl)
                             {
                                 strTemp = s.Substring(0, i);
                                 if (CheckPagination(strTemp, "table|a|b>|i>|strong|div|span"))
                                 {
                                     Temp_String += i.ToString() + ",";
                                     iCount = 0;
                                 }
                             }
                         }
                     }
                 }
                 if (Temp_String.Length > 1)
                 {
                     Temp_String = Temp_String.TrimEnd(',');
                 }
                 Temp_Array = Temp_String.Split(',');
                 int l = Temp_Array.Length;
                 if (Temp_Array.Length > 0)
                 {
                     for (int j = l - 1; j >= 0; j--)
                     {
                         ss = s.Substring(Int32.Parse(Temp_Array[j].ToString()));
                         s = s.Substring(0, Int32.Parse(Temp_Array[j].ToString())) + Pagebreak + ss;
                     }
                 }
                 s = s.Replace("< >", " ");
                 s = s.Replace("<>>", ">");
                 s = s.Replace("<<>", "<");
                 s = s.Replace("<">", """);
                 s = s.Replace("<'>", "'");
                 return s;
             }
        /// <summary>
        /// 检测内容标签闭合情况
        /// </summary>
        /// <param name="strTemp">打算检测的字符</param>
        /// <param name="strFind">打算检查闭合情况的标签集合</param>
        /// <returns></returns>
        private static bool CheckPagination(string strTemp, string strFind)
        {
            strTemp = strTemp.ToLower();
            strFind = strFind.ToLower();
            string[] FindArray;
            string m_strBegin, m_strEnd;
            int n = 0, m_intEndNum = 0, m_ingBeginNum = 0;
            if (strTemp != "" && strFind != "")
            {
                FindArray = strFind.Split('|');
                int cl = FindArray.Length;
                int cc = 0;
                while (cc < cl)
                {
                    m_strBegin = "<" + FindArray[cc];
                    m_strEnd = "</" + FindArray[cc];
                    n = 0;
                    while (strTemp.IndexOf(m_strBegin, n + 1) > -1)//不知道对不对
                    {
                        n = strTemp.IndexOf(m_strBegin, n + 1);
                        m_ingBeginNum += 1;
                    }
                    n = 0;
                    while (strTemp.IndexOf(m_strEnd, n + 1) > -1)//不知道对不对
                    {
                        n = strTemp.IndexOf(m_strEnd, n + 1);
                        m_intEndNum += 1;
                    }
                    cc++;
                    if (m_intEndNum == m_ingBeginNum)
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
            }
            else
            {
                return false;
            }
            return false;
        }
    }
      

  7.   

    这个方法可是插入分页标记,但是插入<span lang="EN-US">$page$, XMl</span>到标签里面了!高手解决一下啊
      

  8.   

    这个是自动插入分页标记,也有可能会插入在<b>$page$ xml语言</b> 这里!手动肯定不会这样插入!但是自动就会出现这个问题,我的意思是能不能插入在标签结束的地方,而不是插入在标签里面
      

  9.   

    文章文字的Length。 每页多少字。
    然后分就行了。 
      

  10.   

    这个我也没实现,我做的html标签是会自己加上,但是图片路径截掉了,虽然补上了,可地址不对
    下面是我的代码:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data;
    using System.Text.RegularExpressions;
    public partial class news_Default : System.Web.UI.Page
    {    public string strTitle = "";    protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {            int fid = 1;
                if (Request.QueryString["id"] != null)
                {
                    string strid = Request.QueryString["id"].ToString();
                    fid = int.Parse(strid);
                }
                Entity.Library.Developments ty = new Entity.Library.Developments();
                Query.Library.DevelopmentsQuery qd = new Query.Library.DevelopmentsQuery(ty);
                var develo = qd.GetTable("8");
                var querys = from m in develo select m;
                if (querys.Count() > 0)
                {
                    strTitle = querys.Max(m => m.Titles).ToString();
                    Label1.Text = strTitle;
                    Label2.Text = querys.Max(m => m.Datetimes).ToString();
                    Label3.Text = querys.Max(m => m.Sorts).ToString();
                    Label4.Text = OutputBySize(Server.HtmlDecode(Common.Library.Share.HtmlDiscode(querys.Max(m => m.Contents).ToString())), fid);
                   // Label4.Text =Common.Library.Share.HtmlDiscode( querys.Max(m => m.Contents).ToString());
                   // Label4.Text = RegSubHtm(Server.HtmlDecode(Common.Library.Share.HtmlDiscode( querys.Max(m => m.Contents).ToString())));
                    DataBind();
                }
            }
        }    public string OutputBySize(string p_strContent, int pageid)
        {
            string m_strRet = p_strContent;
            int m_intPageSize = 1000;//文章每页大小
            int m_intCurrentPage = 1;//设置第一页为初始页
            int m_intTotalPage = 0;
            int m_intArticlelength = p_strContent.Length;//文章长度
            if (m_intPageSize < m_intArticlelength)
            {//如果每页大小大于文章长度时就不用分页了
                if (m_intArticlelength % m_intPageSize == 0)
                {//set total pages count 
                    m_intTotalPage = m_intArticlelength / m_intPageSize;
                }
                else
                {//if the totalsize
                    m_intTotalPage = m_intArticlelength / m_intPageSize + 1;
                }
                if (Request.QueryString["pages"] != null)
                {//set Current page number
                    try
                    {//处理不正常的地址栏的值
                        m_intCurrentPage = Convert.ToInt32(Request.QueryString["pages"]);
                        if (m_intCurrentPage > m_intTotalPage)
                            m_intCurrentPage = m_intTotalPage;
                    }
                    catch
                    {                }            }
                //set the page content 设置获取当前页的大小
                m_intPageSize = m_intCurrentPage < m_intTotalPage ? m_intPageSize : (m_intArticlelength - m_intPageSize * (m_intCurrentPage - 1));
                m_strRet = p_strContent.Substring(m_intPageSize * (m_intCurrentPage - 1), m_intPageSize);
                string m_strPageInfo = "<p></p>";
                for (int i = 1; i <= m_intTotalPage; i++)
                {
                    if (i == m_intCurrentPage)
                        m_strPageInfo += "<b>" + i + "</b>|";
                    else
                        m_strPageInfo += "<a href=Default.aspx?id=" + pageid + "&pages=" + i + ">" + i + "</a>|";
                }
                //输出显示各个页码
                this.labPageNumber.Text = RegSubHtm(m_strPageInfo);
            }
            return m_strRet;
        }
        private string RegSubHtm(string html)
        {
            string subHtml = html;//html.Substring(0, length);
            // MessageBox.Show("subHtml:" + subHtml); int length
            //判断被截取的html最后部分时候包含没有闭合的标签,如"</tb" "<div id="           
            bool isTagOpen = false;
            foreach (char c in subHtml.ToCharArray().Reverse())
            {
                if (c == '<')
                {
                    isTagOpen = true;
                    break;
                }            if (c == '>')
                {
                    isTagOpen = false;
                    break;
                }
            }        if (isTagOpen)
            {//如果包含没有闭合的标签,则继续获取内容,直到获取到闭合标签,即获取到 ">" 字符
                string rightStr = html;//.Substring(length);
                int idxTagEnd = rightStr.IndexOf(">");
                subHtml += rightStr.Substring(0, idxTagEnd + 1);
            }        Stack<string> stack = new Stack<string>();        Regex reg = new Regex(@"(<.[^>]*>)|(<\/.[^>]*>)|<br/>|<br>|<hr>|<hr/>|<img|/>", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Multiline);        MatchCollection mc = reg.Matches(subHtml);
            foreach (var item in mc)
            {            //对<br><hr>这类标签特殊处理
                string toLowerItem = item.ToString().ToLower().Replace(" ", "");
                if (toLowerItem == "<img" || toLowerItem == "<br>" || toLowerItem == "<br/>" || toLowerItem == "<hr>" || toLowerItem == "<hr/>" || toLowerItem=="/>")
                    continue;            if (item.ToString().StartsWith("</"))
                {//碰到闭合的,则出栈
                    if (stack.Peek().Replace("<", "</") == item.ToString())
                        stack.Pop();
                }
                else
                {//否则入栈
                    stack.Push(GetBeginTag(item.ToString()));
                }          
                // MessageBox.Show(item.ToString());
            }
            while (true)
            {//最后把所有没有闭合的标签出栈,补闭合标签,完成截取操作
                if (stack.Count > 0)
                {
                    subHtml += stack.Pop().Replace("<", "</");
                }
                else
                {
                    break;
                }
            }        return subHtml;
        }    private string GetBeginTag(string input)
        {        int idx = input.IndexOf(" ");        if (idx > 0)
            {
                return input.Substring(0, idx) + ">";
            }
            else
            {
                return input;        }
        }
    }/////////////////
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title><%# strTitle %></title>
    <link href="css.css" rel="stylesheet" type="text/css" />
    </head>
    <body>
    <form id="form1" runat="server">
        <div class="warper">
            <div class="content">
                <div class="left_cont">
                     <div class="daohang">当前位置:<a href="default.aspx">首页</a> >> <a href="dongtai.aspx"> 评选动态</a> >> 正文</div>
                    <div class="pxdt third">
                        <div class="cont_title"> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></div>
                        <div class="a_page f_color">文章发表时间:<span><asp:Label ID="Label2" runat="server" Text="Label"></asp:Label></span> 来源:<span><asp:Label ID="Label3" runat="server" Text="Label"></asp:Label></span></div>
                        <div class="body_cont">
                            <asp:Label ID="Label4" runat="server" Text="Label"></asp:Label>
                            <asp:Label ID="labPageNumber" Font-Size="14px" runat="server"> </asp:Label>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </form>
    </body>
    </html>