cms .net webform去服务器控件标签化 pagebase新版本

这是最近在干一个webform的cms的时候用起来的,原来虽然做过很多技术,什么remoting,wcf,webservice,可是弄来弄去,最后也没个收藏的地儿,全都放在笔记本儿上了,可是人又懒地可以,做来做去,最后它们还是扔在那里
。说正题吧:最近用到的这套小型的cms,主就是用的链表了,大部分的栏目都在同一张表里,而这张表囊括了几乎所有需要用到的字段,包括图片,内容,一堆乱七八糟的东西,这样做的时候主要就是读这一张表,所以这里做的时候主要就是把配置给抽出来。封装的作用一直都最关键在委托的使用上,从2.0开始,喜欢用委托,可是手写一个又太麻烦从4.0开发就一直用扩展方法和ACTION FUNC等委托,好 好几年未认真写,如今用来还真的是得心应手。表达思想表达地比较迅速,也容量写好。对于一个对代码有追求的人。应该

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.IO;
using System.Linq;
using System.Runtime.Remoting.Contexts;
using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using JGDJWeb.Helper;
using JGDJWeb.Model;

namespace JGDJWeb.Extensions {
    public class PageBase : System.Web.UI.Page {
        protected PageBase() {
        }

        protected void InitPage() {
            if (!IsPostBack) {
                BindModule(this, (a, b) => { BindSingleModules(this, b, a); });
            }
        }

        protected void BindSingleModules(Page page, string suffix, Repeater a) {
            using (var context = new JGDJEntities()) {
                switch (suffix) {
                    case "jgxx": //机关快讯
                        BindSingleModuleFromNewsClass(new BindSingleModuleFromNewsClassParams(page, suffix, "机关讯息", context, a, 8, () => { }));
                        break;
                    case "tpxw": //机关快讯
                        BindSingleModuleFromNewsClass(new BindSingleModuleFromNewsClassParams(page, suffix, "图片新闻", context, a, 8, () => { }));
                        break;

                    case "gwdt": //工委动态
                        BindSingleModuleFromNewsClass(new BindSingleModuleFromNewsClassParams(page, suffix, "工委动态", context, a, 8, () => { }));
                        break;

                    case "topywa": //要闻
                        BindSingleModuleFromNewsClass(new BindSingleModuleFromNewsClassParams(page, suffix, "要闻", context, a, 2, () => { }));
                        break;

                    case "topywb": //要闻
                        BindSingleModuleFromNewsClass(new BindSingleModuleFromNewsClassParams(page, suffix, "工委动态", context, a, 3, () => { }));
                        break;
                    case "gsgg": //公示公告
                        BindGsggList(context, a);
                        break;
                    case "gbrm": //干部任免
                        BindSingleModuleFromNewsClass(new BindSingleModuleFromNewsClassParams(page, suffix, "干部任免", context, a, 8, () => { }));
                        break;
                    case "djbd": //党建宝典
                        BindSingleModuleFromNewsClass(new BindSingleModuleFromNewsClassParams(page, suffix, "党建宝典", context, a, 4, () => { }));
                        break;
                    case "rdjj": //热点聚焦
                        BindSingleModuleFromNewsClass(new BindSingleModuleFromNewsClassParams(page, suffix, "机关讯息", context, a, 7, () => { }));
                        break;
                    case "dyyzh": //党员驿站
                        BindSingleModuleFromNewsClass(new BindSingleModuleFromNewsClassParams(page, suffix, "党员驿站", context, a, 4, () => { }));
                        break;

                    case "qtfc": //群团风采
                        BindSingleModuleFromNewsClass(new BindSingleModuleFromNewsClassParams(page, suffix, "群团风采", context, a, 4, () => { }));
                        break;
                    case "dflzh": //党风廉政
                        BindSingleModuleFromNewsClass(new BindSingleModuleFromNewsClassParams(page, suffix, "工委动态", context, a, 6, () => { }));
                        break;
                    case "sxdzzhjsh": //三党组织建设
                        BindSingleModuleFromNewsClass(new BindSingleModuleFromNewsClassParams(page, suffix, "工委动态", context, a, 6, () => { }));
                        break;
                    case "pic": //焦点图幻灯
                        BindPics(context, a, 3);
                        break;

                    default:
                        break;
                }
            }
        }

        public class BindSingleModuleFromNewsClassParams {
            private Page _page;
            private string _suffix;
            private string _classCName;
            private JGDJEntities _context;
            private Repeater _a;
            private int _takeCount;
            private Action _doAlternative;

            public BindSingleModuleFromNewsClassParams(Page page, string suffix, string classCName, JGDJEntities context, Repeater a, int takeCount, Action doAlternative) {
                _page = page;
                _suffix = suffix;
                _classCName = classCName;
                _context = context;
                _a = a;
                _takeCount = takeCount;
                _doAlternative = doAlternative;
            }

            public Page Page {
                get { return _page; }
            }

            public string Suffix {
                get { return _suffix; }
            }

            public string ClassCName {
                get { return _classCName; }
            }

            public JGDJEntities Context {
                get { return _context; }
            }

            public Repeater A {
                get { return _a; }
            }

            public int TakeCount {
                get { return _takeCount; }
            }

            public Action DoAlternative {
                get { return _doAlternative; }
            }
        }

        protected void BindSingleModuleFromNewsClass(BindSingleModuleFromNewsClassParams bindSingleModuleFromNewsClassParams) {

            try {
                string jgkxNo = bindSingleModuleFromNewsClassParams.Context.JY_News_Classs.Single(n => n.ClassCName == bindSingleModuleFromNewsClassParams.ClassCName).ClassNo;
                jgkxNo = Encrypt.MD5Encrypt(jgkxNo);
                List<JY_Newss> newss = Common.GetNewsListByCNo(jgkxNo).OrderByDescending(u => u.CreateTime).ToList();
                var news = newss.First();
                var newsPicFirst = newss.FirstOrDefault(u => u.PicURL != null);

                bindSingleModuleFromNewsClassParams.A.DataSource = newss.Where(n => n.NewsID != news.NewsID).Take(bindSingleModuleFromNewsClassParams.TakeCount);
                bindSingleModuleFromNewsClassParams.A.DataBind();
                var prefixArray = new String[] { "More_", "Link_", "P_", "A_", "Img_", "H_" };

                prefixArray.ToList().ForEach(t => {
                    switch (t) {
                        case "More_":
                        case "Link_":
                            var anchor = bindSingleModuleFromNewsClassParams.Page.FindControl(t + bindSingleModuleFromNewsClassParams.Suffix) as HtmlAnchor;
                            if (anchor != null) {
                                if (anchor.InnerHtml == "") anchor.InnerHtml = news.NewsTitle;
                                anchor.HRef = "/List.aspx?ClassNo=" +
                                              Encrypt.MD5Encrypt(news.ClassNo);
                            }
                            break;

                        case "A_":

                            if (newsPicFirst != null) {
                                var alink = bindSingleModuleFromNewsClassParams.Page.FindControl(t + bindSingleModuleFromNewsClassParams.Suffix) as HtmlAnchor;
                                if (alink != null) {
                                    if (alink.InnerHtml == "") alink.InnerHtml = news.NewsTitle;
                                    alink.HRef = "/Detail.aspx?ClassNo=" +
                                                  Encrypt.MD5Encrypt(newsPicFirst.ClassNo);
                                }
                            }
                            break;
                        case "P_":
                        case "H_":
                            var p =
                                bindSingleModuleFromNewsClassParams.Page.FindControl(t +
                                                                                     bindSingleModuleFromNewsClassParams
                                                                                         .Suffix) as
                                    HtmlGenericControl;
                            if (p != null)
                                p.InnerHtml = news.Contents.NoHtml().ToTitleString(50);
                            break;
                        case "Img_":

                            if (newsPicFirst != null) {
                                var img =
                                    bindSingleModuleFromNewsClassParams.Page.FindControl(t +
                                                                                         bindSingleModuleFromNewsClassParams
                                                                                             .Suffix) as
                                        HtmlImage;
                                if (img != null)
                                    img.Src = newsPicFirst.PicURL;
                            }
                            break;
                        case "ImgTitle_":

                            if (newsPicFirst != null) {
                                var img =
                                    bindSingleModuleFromNewsClassParams.Page.FindControl(t +
                                                                                         bindSingleModuleFromNewsClassParams
                                                                                             .Suffix) as
                                        HtmlGenericControl;
                                if (img != null)
                                    img.InnerHtml = newsPicFirst.NewsTitle.ToTitleString(15);
                            }
                            break;

                        default:
                            break;

                    }
                });
                bindSingleModuleFromNewsClassParams.DoAlternative();
            } catch (Exception ex) {
            }
        }
        protected void BindGsggList(JGDJEntities context, Repeater a) {
            try {
                var list =
                    context.IM_AnnounceNotices.Where(c => c.BEGIN_DATE <= DateTime.Now)
                        .OrderByDescending(u => u.SEND_TIME)
                        .Take(5)
                        .ToList();
                a.DataSource = list;
                a.DataBind();
            } catch (Exception ex) {
            }
        }

        protected static void BindPics(JGDJEntities context, Repeater a, int takenCount) {
            try {
                //获取所有已经通过审核的新闻,并且新闻属性不能为空,为了方便使用Linq找出具有幻灯属性的新闻,所以取出全部新闻然后过滤
                var newsList =
                    context.JY_Newss.Where(t => t.JY_NewsClass.Any(nc => nc.IsPass == 1) && t.NewsProperty != null).ToList();
                //过滤具有幻灯属性的新闻,并取得最新的5条记录
                var newsTOP5 =
                    newsList.Where(c => c.NewsProperty.Split(‘,‘)[3] == "1").OrderByDescending(t => t.NewsID).Take(takenCount).ToList();
                a.DataSource = newsTOP5;
                a.DataBind();
            } catch (Exception ex) {
            }
        }

        protected void BindModule(Page page, Action<Repeater, string> bindSingRpt) {
            using (var context = new JGDJEntities())

                BindControls(page, "List_", bindSingRpt);
        }

        protected void BindControls(Page page, String prefix, Action<Repeater, string> bindSingControl) {
            var controlList = page.Controls;
            if (page.Master != null) {
                var container = page.Master.FindControl("ContentPlaceHolder1") as ContentPlaceHolder;
                if (container != null)
                    controlList = container.Controls;
            }
            foreach (Control control in controlList) {
                if (control.ID != null && control.ID.StartsWith(prefix) && control is Repeater) {
                    var suffix = control.ID.Split(‘_‘)[1];
                    if (prefix == "List_")
                        bindSingControl(control as Repeater, suffix);
                }
            }
        }

        protected void Bind(string className, HtmlAnchor anchor, Repeater repeater, int count) {
            try {
                using (var context = new JGDJEntities()) {
                    var classNo = context.JY_News_Classs.Where(n => n.ClassCName == className).First().ClassNo;
                    var newss = Common.GetNewsListByCNo(Encrypt.MD5Encrypt(classNo));

                    if (anchor != null) {
                        anchor.HRef = "/List.aspx?ClassNo=" + Encrypt.MD5Encrypt(classNo);
                    }
                    repeater.DataSource = newss.Take(count);
                    repeater.DataBind();
                }
            } catch (Exception e) { }
        }

        #region 网站访问量
        protected void pageviews() {
            int count = 0;
            //数据累加
            int Stat = 0;
            StreamReader srd;
            //取得文件的实际路径
            string file_path = Server.MapPath("/XML/counter.txt");
            //打开文件进行读取
            srd = File.OpenText(file_path);
            while (srd.Peek() != -1) {
                string str = srd.ReadLine();
                count = int.Parse(str);
            }
            srd.Close();

            // 在新会话启动时运行的代码
            Application.Lock();

            //获取Application对象中保存的网站总访问量
            Stat = count;
            Stat += 1;
            object obj = Stat;
            Application["counter"] = obj;
            //将数据记录写入文件
            StreamWriter srw = new StreamWriter(file_path, false);
            srw.WriteLine(Stat);
            srw.Close();
            Application.UnLock();
        }
        #endregion
    }
}
时间: 2024-08-08 01:26:35

cms .net webform去服务器控件标签化 pagebase新版本的相关文章

初探React,将我们的View标签化

前言 我之前喜欢玩一款游戏:全民飞机大战,而且有点痴迷其中,如果你想站在游戏的第一阶梯,便需要不断的练技术练装备,但是腾讯的游戏一般而言是有点恶心的,他会不断的出新飞机.新装备.新宠物,所以,很多时候你一个飞机以及装备还没满级,新的装备就又出来了,并且一定是更强! 于是很多人便直接抛弃当前的飞机与装备,追求更好的,这个时候如果是人民币玩家或者骨灰级大神玩家的话,基本可以很快站在世界的顶端,一者是装备好,一者是技术好,但是我不愿意投入太多钱,也不愿意投入过多精力,于是在一套极品装备满级后会积累资源

团购2015:去团购化 争做O2O平台

去年四季度,在Groupon发布三季度财报时宣称将转型电商平台,这也就意味着Groupon的主营业务方向将要做出极大的调整.作为团购行业鼻祖的Groupon转型,预示着团购模式的未来前景堪忧,这一消息所产生的蝴蝶效应正在中国团购市场迅速蔓延, 巧合是的,较早开始转型电商平台的窝窝商城(窝窝团)已于今日向SEC提交了IPO申请,一旦成功,窝窝将成为中国生活服务电商行业第一股,也是2015年开年中概股第一股. Groupon明确转型 或促进中国团购转型提速 作为一家标志性的美国上市公司,Groupo

如何运用CRM系统数据进行标签化精准营销?

相信大家都了解过大数据,也学过一些大数据分析方法.但是我们如何利用大数据分析,创造价值呢? 今天智云通CRM系统小编要跟大家分享如何运用CRM系统数据进行标签化精准营销. 这个问题从本质上看是两类问题: 对用户画像,打上标签.这是个聚类问题,将同一类用户通过算法聚合成一类. 那如何打标签呢?用户画像数据维度 针对每一类数据实体,进一步分解可落地的数据维度,形成字段集. 1. 用户数据: 用户自然特征:性别,年龄,地域,教育水平,出生日期,职业,星座 用户兴趣特征:兴趣爱好,使用APP/网站,浏览

MaidSafe.net,一个完全去中心的化的云存储系统

MaidSafe.net,一个完全去中心的化的云存储系统 (类似Bitcloud系统) 本帖最后由 tbit 于 2014-3-26 16:11 编辑 已经开发了8年,最近即将推出测试和IPO.开放源码,C++, github下载.白皮书很长,我先翻译了一部分.大家如果有兴趣的化我再继续翻译吧.一些参考资料: Scottish company Maidsafe claims to have built a Bitcloud-like systemhttp://www.wired.co.uk/ne

java 去html标签,去除字符串中的空格,回车,换行符,制表符

public static String getonerow(String allLine,String myfind)     {                           Pattern pattern = Pattern.compile("<div class=\"row\">.*?</div>");                      Matcher  matcher = pattern.matcher(allLine

我的代码,写的pagebase。还是留着吧,是这套cms的核心了。语义化,与我的云平台一样,只不过云平台是用js写的。这个是webform.下回写mvc吧。核心很简单。

using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using JGDJWeb.Helper; using JGDJWeb.Model; namespace JGDJWeb

开源CMS系统Moodle对比中国本土化开源在线教育平台EduSoho

这段时间研究了一下著名的开源课程管理系统Moodle,也了解了一下目前国内比较火的在线教育平台EduSoho,发现二者有诸多相似之处,但优势各异.接下来就简单对着两个平台做一下对比. 首先来说一下EduSoho的特点及优势: 1.拥有强大的专业技术团队,因而能够为用户提供全栈式的解决方案. 2.从大的角度上来说,EduSoho将传统的网校建设工作进行了高度的梳理与整合,从用户的实际需求出发,将一些关键和困难的技术要点进行了封装,使得传统的网校建设和课程建设的诸多实现细节被屏蔽起来,用户在搭建自己

DEDE CMS 使用dede的sql标签 获取文章链接地址

在DEDE CMS中,有时需要进行多表联查,此时只能通过sql语句来调用文档,可是用默认的[field:arcurl/]无法获取文档的链接地址,后经到网上搜寻,找到调用“文章链接地址”的办法,如下: 在DEDE中,可以自由使用SQL语句来配合DEDE标签进行更多的个性化调用.通过SQL语句调用文档列表并获取其静态页面地址的方法. 基本参照格式为: {dede:sql sql='select 字段 From 表名称 where 条件语句'} [field:字段名/] {/dede:sql} 由上面

用PHP去实现静态化

我们在PHP网站开发过程中为了网站的推广或者SEO的需要,需要对网站进行一定的静态化,这里设计到什么是静态页面,所谓的静态页面,并不是页面中没有动画等元素,而是指网页的代码都在页面中,即不需要再去执行PHP脚本等服务器端的语言去运行,我们可以直接访问到的网页,这就是静态网页. 那么静态网页有什么好处呢?第一个主要原因就是因为搜索引擎,由于搜索引擎对PHP页面搜鹿和html页面的收录有一定的差别,并且面临着页面资源的占用问题,我们需要对.php文件进行静态化.有一种方式是改写访问地址,可以通过UR