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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

20110612 DiscuzNT代码研究(3)

發(fā)布時間:2025/3/20 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 20110612 DiscuzNT代码研究(3) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

????? PDF下載:http://dl.dbank.com/c0d4ygs82d

1.?????? 說明

本文主要討論

1)??? ASP.NET的頁面隱藏模型

2)??? 通過頁面隱藏模型重寫Discuz.Web-install-index.aspx頁面

2.?????? Asp.Net頁面隱藏模式

2.1.????? 創(chuàng)建index_cfq.aspxWeb窗體頁面

選擇install文件夾à右鍵à選擇“添加-新建項”à選擇“Web窗體”,輸入“index_cfq.aspx

2.2.????? index_cfq.aspx頁面代碼

?????? 我們主要關注第1行,第一行說明:

1)??? 本頁面采用的語言“C#

2)??? 本頁面的事件采用自動匹配:AutoEvenWireUp=”True”

3)??? 本頁面采用代碼隱藏模型:CodeBehind=”index_cfq.asp.cs”

4)??? 本頁面編譯時生成的類將繼承Discuz.Web.install.index_cfq

2.3.????? @Page指令的AutoEvenWireUp屬性

AutoEvenWireUp屬性用于指示“頁面的事件是否自動匹配”。

AutoEvenWireUp=true時,表示頁面啟動事件自動匹配。

2.3.1.????? 事件類型

這里我們談到事件,我們把事件適當區(qū)分一下:

1)??? 頁事件:即Page頁面的事件

2)??? 控件事件:即控件上的事件,比如aspx頁面上有個Button控件,那么Button控件的事件成為控件事件。

AutoEvenWireUp是針對頁事件而言的。

2.3.2.????? 事件與方法的綁定

事件與事件處理方法的綁定,在.NET中是通過“委托”實現(xiàn)的,在ASP.NET中,有幾種方式可以綁定事件方法。

1)??? 委托:在C#代碼中實現(xiàn)

this.button1.Click += new System.EventHandler(this.button1_Click);

2)??? 控件標記

<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />

3)??? 基于方法命名約定的方法

一般指頁事件的方法,這種綁定需要設置AutoEvenWireUp=true,其他地方不用指定方法與事件的關聯(lián),系統(tǒng)會自動查找按照“命名約定的方法”(Page_事件名稱),然后即可啟動事件。當然方法的參數(shù)必須與事件委托一致。

protected void Page_Load(object sender, EventArgs e)

2.4.????? 關于頁面隱藏模型

先看看下圖,當然下圖不是標準的UML圖,只是為了解釋一下而已。

本圖是在頁面隱藏模型下在Web服務器編譯后的類圖信息。

?????? 可以通過VS的類視圖可以看得比較清楚

??????

?????? 我們對整個過程稍微介紹一下。

當我們建立一個index_cfqweb窗體,VS自動幫忙創(chuàng)建了幾個文件:

1)??? index_cfq.aspx

2)??? index_cfq.aspx.cs(index_cfq.aspx.designer.cs)

n???????? index_cfq.aspx

主要是aspx頁面信息,可以包括C#代碼,服務器控件信息,HTML標記,CSSJavaScript等等內(nèi)容。

?????????????

n???????? index_cfq.aspx.cs(index_cfq.aspx.designer.cs)

index_cfq.aspx.cs主要放一些C#源代碼,一般是一些方法,當然還可以有很多內(nèi)容弄個,但是不包含aspx頁面上的服務器控件定義信息(在index_cfq.aspx.designer.cs定義)。

其中index_cfq.aspx.designer.cs主要是放一些服務器控件的定義內(nèi)容。

?????? 其中index_cfq.aspx文件編譯后,實際上會產(chǎn)生兩個類,一個是index_cfq的部分類,與index_cfq.aspx.cs文件編譯后產(chǎn)生的index_cfq部分類一起構成index_cfq完整類。

??????

?????? 同時index_cfq.aspx還產(chǎn)生一個類,即index_cfq_aspx類,此類繼承自index_cfq類,這也是

中指定 Inherites="Discuz.Web.install.index_cfq"繼承的意思。

?????? 如果把Inherites="Discuz.Web.install.index_cfq"改為

Inherites="Discuz.Web.install.index_cfq_cfq",則在運行時會提示如下錯誤:

然后觀察類視圖,即會發(fā)現(xiàn),實際上系統(tǒng)仍自動創(chuàng)建一個index_cfq_cfq的類,只是這個類因為在其他頁面沒有指定繼承Page,所以默認繼承Object,但是對于ASP.NET頁面必須繼承Page,所以在運行提示錯誤,說明該類型不是繼承與Page的錯誤。

然后我們Inherites="Discuz.Web.install.index_cfq"該回來,

然后把CodeBehind="index_cfq.aspx.cs"刪除或者改為

CodeBehind="index_cfq_cfq.aspx.cs"

瀏覽程序,這是我們發(fā)現(xiàn)程序正常運行。

也就是說,實際上當我們編譯了dll文件了,實際上我們可以不用CodeBehind這個東西,我們直接用Inherites指名我們要繼承的類即可。

我再做一個實驗。

1)????? 把“index_cfq.aspx.cs”改名為“index_cfq_cfq.aspx.cs

2)????? 把“index_cfq.aspx.designer.cs”改名為“index_cfq_cfq.aspx.designer.cs

這是會發(fā)現(xiàn)以下現(xiàn)象:

1)????? index_cfq_cfq.aspx.designer.cs自動關聯(lián)到index_cfq_cfq.aspx.cs。這個應該是VS的機制。

2)????? index_cfq.aspx底下的兩個文件會感嘆號,可以刪除了,所以下面圖看不到。

之所有有感嘆號,是因為在項目中有包含此兩個文件,但是實際文件已經(jīng)不存在了,所以提示感嘆號。

??????

?????? 然后選擇那兩文件,包含到項目中。

??????

然后重新生成網(wǎng)站,運行index_cfq.aspx,正常!

這里需要注意兩個細節(jié):

1)??? 如果以上兩文件為包含到項目中,則無法正常運行,會提示類不存在。

2)??? 如果未包含文件,但是通過CodeFile指定CS文件,也是可以運行的,但是發(fā)布網(wǎng)站時,必須一同發(fā)布源代碼哦!(用CodeBehind也是不行的)

3.?????? 修改index.aspx頁面為頁面隱藏模式

既然我們立即了頁面隱藏模式的原理,我們現(xiàn)在嘗試把index.aspx頁面修改為頁面隱藏模式。

1)??? 建立一個index.aspx.cs文件,在其中創(chuàng)建一個index的類

2)??? 然后把<script></script>的代碼搬移過來(可以不刪除index中的代碼,注釋掉即可)

3)??? index.aspx.cs文件的Page指令中添加如下內(nèi)容:

4)??? 注釋掉“Page_Lode”方法中的頁面跳轉代碼,以便測試

5)??? 經(jīng)過測試,調(diào)試成功。

(本文結束)

轉載于:https://www.cnblogs.com/wesoft/archive/2011/06/12/2079200.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的20110612 DiscuzNT代码研究(3)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。