日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Community Server2.0专注细节一 邮件提醒按钮实现(上) [转]

發布時間:2025/4/5 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Community Server2.0专注细节一 邮件提醒按钮实现(上) [转] 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
作者: 彭斌 ,廣州.NET俱樂部 2006-3-9?

在去年的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专注细节一 邮件提醒按钮实现(上) [转]的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。