HOW TO:使用 ASP.NET Login 控制項的進階功能
更新:2007 年 11 月
Login 控制項是一種複合控制項 (Composite Control),它能提供登入表單的所有一般使用者介面 (UI) 項目。這個控制項是組合式的控制項,其各個部分都可加以自訂;這些部分包括 [Username] (使用者名稱) 和 [Password] (密碼) 文字方塊、[Submit] (送出) 按鈕、要建立新使用者的按鈕、[Remember Me] (記住我的帳戶) 核取方塊,以及供使用者的協助資訊。您可以定義新項目或重複使用預設元件,藉以自訂 Login 控制項的使用者介面,也可以自訂 Login 控制項的使用者介面文字和外觀 (字型與色彩)。您也可以藉由套用 ASP.NET 主題或面板,變更 Login 控制項的整體外觀。
另外,您可以利用 Login 控制項更進階的能力,例如是否將登入資訊儲存在瀏覽器的持續性 Cookie 中,或者在使用者登入時是否顯示登入控制項 (在預設登入頁面以外的網頁上)。最後,您可以將登入控制項轉換為樣板 (Template),進而對控制項的外觀有全然的掌控權。
若要控制使用者登入時登入控制項是否可見
請將 Login 控制項置於網頁上。
注意事項: 根據預設,會設定控制項使用名為 Login.aspx 的登入頁面。您可以藉由設定 FormsAuthentication 類別的 LoginUrl 屬性,變更 Web.config 檔中登入頁面的名稱。
如果您想讓 Login 控制項只在使用者未登入時出現 (該控制項總是會顯示在 LoginUrl 屬性所識別的登入頁面上),請將 VisibleWhenLoggedIn 屬性設為 false。
若要控制是否將驗證語彙基元儲存在持續性 Cookie 中
如果您想讓控制項顯示 [儲存我的資訊供下次使用] 核取方塊,請將 DisplayRememberMe 屬性設為 true。如果使用者在登入時選取 [儲存我的資訊供下次使用] 核取方塊,則會將驗證 (Authentication) 語彙基元 (Token) 儲存在瀏覽器的持續性 Cookie 中。
如果您想讓 [儲存我的資訊供下次使用] 核取方塊預設為選取,請將 RememberMeSet 屬性設為 true。
如果您想將驗證語彙基元儲存在持續性 Cookie 中,而不讓使用者選擇清除 [儲存我的資訊供下次使用] 核取方塊,請將 RememberMeSet 屬性設為 true,並將 DisplayRememberMe 屬性設為 false。由於使用者的持續性驗證語彙基元可能會由不適當的使用者使用,如果網站可由服務多個使用者之公用電腦進行存取,就不建議在該網站執行這項操作。
若要將說明連結加入 Login 控制項
若要將連結加入 Login 控制項,以便將使用者帶至可建立新使用者帳戶的 URL,請將 CreateUserText 屬性設為文字 (例如 [請按這裡立即註冊]),並將 CreateUserUrl 屬性設為說明網頁的 URL (例如 ~/register.aspx)。
注意事項: 此步驟和後需步驟需要目的 URL 位於不要求驗證的位置。
若要將連結加入 Login 控制項,以便將使用者帶至使用者可復原其密碼的 URL,請將 PasswordRecoveryText 屬性設為文字 (例如 [忘記密碼?]),並將 PasswordRecoveryUrl 屬性設為說明網頁的 URL (例如 ~/recoverpassword.aspx)。
若要將連結加入 Login 控制項,以便將使用者帶至說明 URL,請將 HelpPageText 屬性設為文字 (例如 [需要說明?],並將 HelpPageUrl 屬性設為說明網頁的 URL (例如 ~/userhelp.aspx)。
若要將影像加入 Login 控制項
若要使用影像代替 [登入] 按鈕,請將 LoginButtonImageUrl 屬性設為登入影像檔的 URL (例如 ~/images/login.gif)。
您還可以分別使用 PasswordRecoveryIconUrl、CreateUserIconUrl 和 HelpPageIconUrl 屬性,在影像中加入連結,以建立使用者 URL、密碼復原 URL 和說明 URL。
將 Login 控制項轉換為樣板
您可以將 Login 控制項轉換為樣板,它是以含有 ASP.NET 控制項 (例如 Label 和 TextBox) 的表格形式定義在標記中。之後,您便可以使用這些項目或加入自己的項目,建立 Login 控制項的自訂樣板。請注意,組成 Login 樣板的控制項所使用的控制項 ID 是和預設樣板中的一樣。
若要使用含有 Login 控制項的樣板
在 [設計] 檢視中,將 Login 控制項放置到網頁上。
以滑鼠右鍵按一下該控制項,然後從快速鍵功能表中選取 [轉換為樣板]。
Login 控制項的轉換方式需視 DOCTYPE 宣告而定。如果 DOCTYPE 宣告是設為 XHTML 1.0 Transitional (<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">),則會將樣式套用至 Login 控制項轉換為樣板時的表格。如果 DOCTYPE 宣告不是設為 XHTML 1.0 Transitional 或是不存在,則產生的外部表格中不會有任何持續的樣式資訊。
例如,假設您在 Login 控制項上設定相對字型大小,再將控制項轉換為樣板,則表格中不會有持續的相對字型大小。下列範例示範的是具有字型大小設為 X-Large 的 Login 控制項。
<asp:login id="Login2" font-size="X-Large" BackColor="#F7F6F3" BorderColor="#E6E2D8" BorderPadding="4" BorderStyle="Solid" BorderWidth="1px" Font-Names="Verdana" ForeColor="#333333">
<TitleTextStyle BackColor="#5D7B9D" Font-Bold="True" Font-Size="0.9em" ForeColor="White" />
<InstructionTextStyle Font-Italic="True" ForeColor="Black" />
<TextBoxStyle Font-Size="0.8em" />
<LoginButtonStyle BackColor="#FFFBFF" BorderColor="#CCCCCC" BorderStyle="Solid" BorderWidth="1px"
Font-Names="Verdana" Font-Size="0.8em" ForeColor="#284775" />
</asp:login>
當前述程式碼中的 Login 控制項轉換為樣板時,所建立的表格並不會套用任何樣式。下列範例是由前述控制項轉換為樣板時所產生的程式碼片段。
<asp:login id="Login2" font-size="X-Large" BackColor="#F7F6F3" BorderColor="#E6E2D8" BorderPadding="4" BorderStyle="Solid" BorderWidth="1px" Font-Names="Verdana" ForeColor="#333333">
<TitleTextStyle BackColor="#5D7B9D" Font-Bold="True" Font-Size="0.9em" ForeColor="White" />
<InstructionTextStyle Font-Italic="True" ForeColor="Black" />
<TextBoxStyle Font-Size="0.8em" />
<LoginButtonStyle BackColor="#FFFBFF" BorderColor="#CCCCCC" BorderStyle="Solid" BorderWidth="1px"
Font-Names="Verdana" Font-Size="0.8em" ForeColor="#284775" />
<LayoutTemplate>
<table border="0" cellpadding="4" cellspacing="0" style="border-collapse: collapse">
...
如果您想要將樣式屬性也套用至 Login 控制項轉換為樣板時所產生的表格,請先確定網頁的 DOCTYPE 是設為 XHTML 1.0 Transitional,然後才從 [設計] 檢視中的控制項功能表內選取 [轉換為樣板]。