国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

關于上下文(Context)/2(轉MS)

2024-07-21 02:16:54
字體:
來源:轉載
供稿:網友

[visual basic]

<script language="vb" runat="server">    sub page_load(sender as object, e as eventargs) {        if user.identity.isauthenticated then            welcome.text = "歡迎" + user.identity.name        else            ' 尚未登錄,添加一個指向登錄頁的鏈接            welcome.text = "請登錄!"            welcome.navigateurl = "signin.aspx"        end if    end sub</script><asp:hyperlink id="welcome" runat="server" maintainstate="false"></asp:hyperlink>

[c#]

<script language="c#" runat="server">    void page_load(object sender, eventargs e) {        if (user.identity.isauthenticated) {            welcome.text = "歡迎" + user.identity.name;        }        else {            // 尚未登錄,添加一個指向登錄頁的鏈接            welcome.text = "請登錄!";            welcome.navigateurl = "signin.aspx";        }    }</script><asp:hyperlink id="welcome" runat="server" maintainstate="false"></asp:hyperlink>

context.items 簡介


希望以上示例可以說明,使用手頭僅有的上下文信息編寫 web 應用程序是多么容易。那么,如果可以用同樣的方法訪問您應用程序獨有的一些上下文,不是很好嗎?
這就是 context.items 集合的用途。它使用在參與處理請求的各部分代碼中都可用的方法,保存應用程序的請求特有值。例如,同樣一條信息可以用在 global.asax、aspx 頁、頁內的用戶控件中,也可以由頁調用的業務邏輯使用。
請考慮 ibuyspy portal(英文)應用程序示例。它使用一個簡單的主頁 desktopdefault.aspx 來顯示門戶內容。顯示的內容取決于所選擇的選項卡,以及用戶(如果已經過身份驗證)角色。

圖 2:ibuyspy 主頁
查詢字符串包含正被請求的選項卡的 tabindedx 和 tabid 參數。在處理請求的整個過程中,一直使用此信息篩選要顯示給用戶的數據。http://www.ibuyspyportal.com/desktopdefault.aspx?tabindex=1&tabid=2(英文)
要使用查詢字符串值,需要首先確保它是一個有效值,如果不是,則要進行一些錯誤處理。它并不是一大串代碼,但是您真的要在每個使用該值的頁和組件中復制它嗎?當然不!在 portal 示例中,甚至更多的地方都涉及到它,因為一旦我們知道了 tabid,就可以預先加載其他信息。
portal 使用查詢字符串值作為參數,以構造一個新的 portalsettings 對象,并將它添加到 global.asax 的 beginrequest 事件的 context.items 中。由于在每個請求開始處都執行了開始請求,這使得與該選項卡有關的值在應用程序的所有頁和組件中都可用。請求完成后,對象將被自動丟棄 - 非常整齊!

[visual basic global.asax]

      sub application_beginrequest(sender as [object], e as eventargs)                  dim tabindex as integer = 0         dim tabid as integer = 0                  ' 從查詢字符串獲取 tabindex         if not (request.params("tabindex") is nothing) then            tabindex = int32.parse(request.params("tabindex"))         end if                  ' 從查詢字符串獲取 tabid         if not (request.params("tabid") is nothing) then            tabid = int32.parse(request.params("tabid"))         end if                  context.items.add("portalsettings", _new portalsettings(tabindex, tabid))      end sub

[c# global.asax]

void application_beginrequest(object sender, eventargs e) {            int tabindex = 0;    int tabid = 0;    // 從查詢字符串獲取 tabindex    if (request.params["tabindex"] != null) {                       tabindex = int32.parse(request.params["tabindex"]);    }                    // 從查詢字符串獲取 tabid    if (request.params["tabid"] != null) {                      tabid = int32.parse(request.params["tabid"]);    }    context.items.add("portalsettings", new portalsettings(tabindex, tabid));}

desktopportalbanner.ascx 用戶控件從 context 請求 portalsetting 的對象,以訪問 portal 的名稱和安全設置。事實上,此模塊是操作中的 context 的一個典型綜合示例。為闡明這一點,我已將代碼進行了一些簡化,并用粗體標記了 http 或應用程序特定的 context 被訪問過的所有地方。

[c# desktopportalbanner.ascx]

<%@ import namespace="aspnetportal" %><%@ import namespace="system.data.sqlclient" %><script language="c#" runat="server">    public int          tabindex;    public bool         showtabs = true;    protected string    logofflink = "";    void page_load(object sender, eventargs e) {        // 從當前上下文獲取 portalsettings  portalsettings portalsettings = (portalsettings) context.items["portalsettings"];        // 動態填充門戶站點名稱        sitename.text = portalsettings.portalname;        // 如果用戶已登錄,自定義歡迎信息        if (request.isauthenticated == true) {                    welcomemessage.text = "歡迎" + context.user.identity.name + "!<" + "span class=accent" + ">|<" + "/span" + ">";            // 如果身份驗證模式為 cookie,則提供一個注銷鏈接            if (context.user.identity.authenticationtype == "forms") {                logofflink = "<" + "span class=/"accent/">|</span>/n" + "<a href=" + request.applicationpath + "/admin/logoff.aspx class=sitelink> 注銷" + "</a>";            }        }        // 動態顯示門戶選項卡條        if (showtabs == true) {            tabindex = portalsettings.activetab.tabindex;            // 生成要向用戶顯示的選項卡列表                                               arraylist authorizedtabs = new arraylist();            int addedtabs = 0;            for (int i=0; i < portalsettings.desktoptabs.count; i++) {                            tabstripdetails tab = (tabstripdetails)portalsettings.desktoptabs[i];                if (portalsecurity.isinroles(tab.authorizedroles)) {                     authorizedtabs.add(tab);                }                if (addedtabs == tabindex) {                    tabs.selectedindex = addedtabs;                }                addedtabs++;            }                      // 用已授權的選項卡填充頁頂部的選項卡// 列表            tabs.datasource = authorizedtabs;            tabs.databind();        }    }</script><table width="100%" cellspacing="0" class="headbg" border="0">    <tr valign="top">        <td colspan="3" align="right">            <asp:label id="welcomemessage" runat="server" />            <a href="<%= request.applicationpath %>">portal 主頁</a><span class="accent"> |</span> <a href="<%= request.applicationpath %>/docs/docs.htm">                portal 文檔</a>            <%= logofflink %>                      </td>    </tr>    <tr>        <td width="10" rowspan="2">                     </td>        <td height="40">            <asp:label id="sitename" runat="server" />        </td>        <td align="center" rowspan="2">               </td>    </tr>    <tr>        <td>            <asp:datalist id="tabs" runat="server">               <itemtemplate>                   <a href='<%= request.applicationpath %>/desktopdefault.aspx?tabindex=<%# container.itemindex %>&tabid=<%# ((tabstripdetails) container.dataitem).tabid %>'><%# ((tabstripdetails) container.dataitem).tabname %></a>                 </itemtemplate>                <selecteditemtemplate>                                     <span class="selectedtab"><%# ((tabstripdetails) container.dataitem).tabname %></span>                 </selecteditemtemplate>            </asp:datalist>        </td>    </tr></table>

您可以使用 visual basic 和 c# 在 http://www.ibuyspy.com(英文)聯機瀏覽并運行 ibuyspy portal 的完整源文件,或者下載后再運行。

小結


context 是 asp.net 中的又一個“精益求精”的功能。它擴展了 asp 的已經很不錯的上下文支持,以便將兩個掛鉤添加到 asp.net 的新運行時功能中。同時添加了 context.items,作為短期值的新狀態機制。但對于開發人員,此功能的最大好處是使代碼更緊湊,且易于維護,而且此上下文我們都能看懂。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 东港市| 陈巴尔虎旗| 邵武市| 丰县| 青冈县| 莫力| 西充县| 敦煌市| 涿州市| 海晏县| 驻马店市| 武冈市| 祁门县| 哈尔滨市| 乌海市| 平果县| 大安市| 金沙县| 右玉县| 龙岩市| 鱼台县| 昌邑市| 武邑县| 永胜县| 南木林县| 衡阳县| 宁南县| 额敏县| 武安市| 裕民县| 玉溪市| 启东市| 合山市| 盱眙县| 普格县| 都安| 镶黄旗| 伊金霍洛旗| 临潭县| 静海县| 三江|