Community Server2.0专注细节一 邮件提醒按钮实现(上) [转]
在去年的CS1.x专题中,我用了大部分的时间去讨论CS底层的结构与运行机制.在接下来的CS2.0系列文章中我将专著细节.来分析CS2.0的一些部件的实现.
CS1.0与2.0有些变化,但是运行机制变化不大,变化的只是细节与增加的功能.
细节的第一篇,我们从一个按钮开始说起:
上面的“邮件提醒”按钮是在CS2.0论坛模块里的一个具体帖子左上角出现的。该按钮不是一般的按钮,有图片并且还有文字(这个文字不是图片中的一部分那么简单,文字会根据xml的资源文件的不同而替换不同的语言),另外点击按钮还会通过Ajax回调一个服务器端方法,实现无刷新操作。
首先要明白的是,该按钮不是继承自Button,而是一个自定义控件。在CommunityServer.Controls项目,找到Utility文件夹下的ThreadSubscribeLinkButton.cs类。这就是该按钮的实现了。
public class ThreadSubscribeLinkButton : HtmlAnchor, ITrackedThread
该Button是继承了HtmlAnchor(就是HTML 的<a>)与 ITrackedThread。
ITrackedThread接口定义很简单:
public interface ITrackedThread
{
bool IsTracked { get;set;}
int ThreadID { get;set;}
bool Visible { get;set;}
}
三个属性,分别是“是否已经跟踪”、“被跟踪的线索ID”、“是否可见” ,这里说明一下thread这个单词在CS 中的解释:首先,一个论坛下的一个Post(我们一般叫帖子),发表后就会有一个thread,这个线索包括了Post本身,还包括针对该Post的回复等等。Post和其回复就形成了一个thread。
我们回到ThreadSubscribeLinkButton.cs类看一些重要的属性:
public virtual bool UseImages
public virtual string TrackingResourceName
public virtual string NotTrackingResourceName
public virtual string WorkingResourceName
由于CS是提供多种语言支持,所有想要替换按钮上的文字就需要这些属性了。同时,如果要显示在不同的操作状态,如:在处理的时候显示一个漏沙图标 ,还有在处理完成后要显示一个完成的图标 。这些都需要上述属性的支持。另外,我们可以看出这些属性是可以重写的。
接下来在类中还有几个重要的方法:
protected override void OnLoad(EventArgs e)
这是最早激发的一个事件实现,在CreateChildControls之前。在这里我们可以看到为该类为页面注册了一个Ajax方法:
AjaxManager.Register(this,this.GetType().Name,true,AjaxDebug.None);
(关于Ajax类这次细节分析暂时忽略)
protected override void CreateChildControls()
在OnLoad之后就建立控件内容,内容主要包括一些js脚本的,并且根据IsTracked的值判断按钮应该显示的文字和图片。
protected override void OnPreRender(EventArgs e)
在建立控件内容后,就触发预呈现的OnPreRender事件。在该方法下,主要根据UseImages的值判断调用下面两个方法中的哪一个。
private void BuildCallbackScript()
private void BuildCallbackScriptWithImages()
这两个私有方法,构造Ajax回调的脚步。
[AjaxMethod(IncludeControlValuesWithCallBack=false)]
public bool ToggleEmailReplies(int threadID)
这是Ajax回调的方法,也就是说当点击按钮后,会通过js 通过xmlhttp调用该方法。
ThreadTracking.ReverseThreadTrackingOptions(threadID, context.User.UserID);
通过上面的调用,最终把值保存到数据库。ToggleEmailReplies方法最后返回一个bool变量,客户端的js脚本就会根据这个bool值变化按钮的文字与图片。
转载于:https://www.cnblogs.com/guodapeng/archive/2007/12/21/1009058.html
Community Server2.0专注细节一 邮件提醒按钮实现(上) [转]相关推荐
- 自制CSDN博客评论邮件提醒
CSDN 本身是有评论邮件提醒服务的.我知道,但是........... 你们自己看吧.... 干啥啊?邮件轰炸机嘛?? 拉黑,拉黑 !!! 自己搞一个了. 上代码: # -*- coding:utf ...
- java 拉取收件箱邮件源码_邮件提醒系统:新邮件识别
最近在做邮件提醒抄送企业微信消息系统,就目前而言,无论是pop3还是imap都没有一个好的方法只接收新邮件,基本只能依靠收件箱列表message自行判断,下面给出几种思路并作对比. //收件箱 fol ...
- 域帐号密码快过期邮件提醒
社会的快速发展,企业的规模也随之变大,这样企业的人数自然也增多,由于人数的众多,为了便于管理所以用起了域环境,但是根据某些企业的性质,部分员工也可能不登陆域帐号,以至密码过期,这样,时间一长,域帐号的 ...
- python QQ空间新说说邮件提醒功能实现
先看一下qq邮件是怎么发送的!! 我们先做一个qq邮件发送的插件 #coding:utf-8 #导入所需要的工具包 import smtplib import time from email.mime ...
- 力扣每日一题每天自动邮件提醒
A.需求来源与分析 需求来源于生活,对于只是偶尔有兴趣做做题的我,力扣的每日一题对我一直有以下的不便: 太简单不想做,需要花太多时间的不想做,每天打开力扣其实只是想看一下是什么题,有意思才做. 看题需 ...
- Nodejs监控Apple召回计划邮件提醒
最近,我的13寸 MacBook Pro 2015款电池膨胀了 把笔记本平放在桌面,四个脚中的前两个无法落地,笔记本盖合上之后,屏幕上会印上键盘的纹路,也就是说,笔记本C面D面变形了,已经购买超过3年 ...
- WhatsUp的邮件提醒设置
昨天用easy smtp server + whatsup 2006在xp上成功设置了到126.com的邮件提醒设置.不过很奇怪的是,当晚在idc机房的windows2003上却设置失败,easy s ...
- docker自动续期Freenom域名,配置邮件提醒
1.引言 众所周知,Freenom是地球上唯一一个提供免费顶级域名的商家,不过需要每年续期,每次续期最多一年.利用docker自动续期Freenom域名,并配置邮件提醒 1.1 项目地址 freeno ...
- 【爬虫】力扣每日一题每天自动邮件提醒!!!
使用python实现了一个力扣每日一题每天自动邮件提醒的小爬虫,小但实用!!! 文章目录 A.需求来源与分析 B.技术角度分析 C.具体分析步骤 1.接口协议分析 2.发邮件 3.写crontab放服 ...
最新文章
- redis 的一主二从三哨兵模式
- html响应式导航栏制作,用Sass制作响应式导航栏(原创)
- [react] react的性能优化在哪个生命周期?它优化的原理是什么?
- 区块链将如何影响你的生活?链圈大佬、美图董事长蔡文胜这样说
- Linux中如何打开trn文件,如何通过trn日志文件恢复SQL Server
- vue练习之vue+cnode api
- yum 安装的时候出现错误
- 记一次AD域域管理员密码更改导致某系统群集管理器故障排查解决过程
- AD画封装的血泪教训:有叉的放在外侧
- jdk下载安装并配置环境
- Adobe Creative Cloud Cleaner Tool 清除工具
- VS中多字节字符集和UNICODE字符集的使用说明
- html用css美化表单登录页面
- freemaker word转html,ftl文件-word文档转化成ftl文件
- 大神级ppt作品欣赏_中班美术课件星空PPT课件教案图片音乐
- Word中快速输入公式
- 在浏览器中打开“只能用微信内置浏览器”打开的页面
- 税务总局:今年预计减税1.8万亿元!个体户能享受哪些税收优惠?
- win10安装visio2010出错_为何我安装Visio 2010时会安装不上,提示下面的错误
- 皕杰报表自定义扩展~自定义数据集