自訂 ASP.NET 登入控制項的外觀
更新:2007 年 11 月
您可以自訂數個 ASP.NET 登入控制項的內容;自訂的方法是指定控制項範本,並將自己的控制項加入至控制項的使用者介面 (UI),或是取代或移除控制項 UI 不需要的選擇性控制項。
也可以使用登入控制項的樣式屬性 (Property) 以及佈景主題和面板,量身訂做控制項的外觀。如需詳細資訊,請參考特定控制項的成員和 ASP.NET 佈景主題和面板概觀。
可自訂的登入控制項
您可以自訂登入控制項的內容,在此登入控制項中可以使用範本取代現有的控制項 UI。這包含 Login、PasswordRecovery、CreateUserWizard 和 ChangePassword 控制項。下表列出可供每一個控制項自訂的範本。
Login
使用 LayoutTemplate 範本指定不同的控制項,以擷取用於登入的使用者名稱和密碼。PasswordRecovery
使用 UserNameTemplate 範本指定不同的控制項,以擷取要復原密碼的使用者名稱。使用 QuestionTemplate 範本指定不同的控制項,以便在 RequiresQuestionAndAnswer 屬性為 true 時擷取密碼問題。
使用 SuccessTemplate 範本,指定已順利復原使用者密碼時出現的不同控制項。
CreateUserWizard
使用 CreateUserStep 步驟的 ContentTemplate 範本指定不同的控制項,以擷取建立新使用者帳戶所需的使用者名稱、密碼和其他資訊。使用 CompleteStep 步驟的 ContentTemplate 範本,指定在完成建立使用者作業時出現的不同控制項。
ChangePassword
使用 ChangePasswordTemplate 範本指定不同的控制項,以擷取變更其密碼之使用者的使用者名稱、目前密碼和新密碼。使用 SuccessTemplate 範本,指定已順利變更使用者密碼時出現的不同控制項。
在登入控制項範本中指定控制項
您可以在登入控制項範本中包含其他控制項和命令按鈕,也可以用自己的控制項和命令按鈕來替換。
在登入控制項範本中替換命令按鈕
您可以使用任何控制項當做登入控制項範本中的命令按鈕。但是,為了讓登入控制項可以辨認命令,該命令必須反昇一個包含繼承自 CommandEventArgs 類別的命令引數的事件。命令按鈕必須指定 CommandEventArgs 類別的 CommandName 屬性值,以辨識登入控制項將要執行哪個命令。下表列出 CommandName 屬性的有效值及其相關的登入控制項範本。
Login.LayoutTemplate
Login:驗證使用者認證並登入使用者。PasswordRecovery.UserNameTemplate
Submit:擷取要復原密碼的使用者名稱並繼續進行登入處理序。PasswordRecovery.QuestionTemplate
Submit:擷取使用者的密碼答案並復原使用者的密碼。CreateUserWizard.CreateUserStep, CustomNavigationTemplate
CreateUser:擷取使用者提供的值並建立新的使用者帳戶。Cancel:終止建立使用者作業。
CreateUserWizard.CompleteStep, ContentTemplate
Continue:讓使用者巡覽至 ContinueDestinationPageUrl 頁面。ChangePassword.ChangePasswordTemplate
ChangePassword:擷取使用者提供的值並變更密碼。Cancel:終止變更密碼作業。
ChangePassword.SuccessTemplate
Continue:讓使用者巡覽至 ContinueDestinationPageUrl 頁面。
在登入控制項範本中替換控制項
您可以在各自的範本中替換由數個 ASP.NET 登入控制項所使用的輸入和顯示控制項。每個範本都有必須內含在範本中的控制項及選擇性控制項。會使用控制項的 ID 屬性來辨識必要性和選擇性控制項。如果範本不包含 ID 屬性設定為必要控制識別項的控制項,或者是該控制項並未實作適當的介面,則 ASP.NET 登入控制項將會擲回例外狀況。
下表會依照其 ID 屬性列出範本和必要的控制項。
Login.LayoutTemplate
UserName:所要登入的使用者帳戶名稱。這個控制項為必要項且必須實作 IEditableTextControl 介面。Password:所要登入的使用者密碼。這個控制項為必要項且必須實作 IEditableTextControl 介面。
RememberMe:值為 true 會在永久性的 Cookie 中儲存驗證語彙基元,而值為 false 則會在工作階段 (Session) Cookie 中儲存驗證語彙基元。這個控制項是選擇項,它必須實作 ICheckBoxControl 介面。
FailureText:顯示登入失敗訊息。這個控制項是選擇項,它必須實作 ITextControl 介面。
PasswordRecovery.UserNameTemplate
UserName:要復原密碼的使用者帳戶名稱。這個控制項是必要項,它必須實作 IEditableTextControl 介面。FailureText:顯示密碼復原失敗訊息。這個控制項是選擇項,它必須實作 ITextControl 介面。
PasswordRecovery.QuestionTemplate
UserName:顯示正在復原密碼的使用者帳戶名稱。這個控制項是選擇項,它必須實作 ITextControl 介面。Question:正在復原密碼之使用者的密碼問題。這個控制項是選擇項,它必須實作 ITextControl 介面。
Answer:正在復原密碼之使用者的密碼答案。這個控制項是必要項,它必須實作 IEditableTextControl 介面。
FailureText:顯示密碼復原失敗訊息。這個控制項是選擇項,它必須實作 ITextControl 介面。
CreateUserWizard.CreateUserStep, ContentTemplate
UserName:所要建立之使用者帳戶的帳戶名稱。這個控制項是必要項,它必須實作 IEditableTextControl 介面。Password:所要建立之使用者帳戶的密碼。這個控制項是必要項,它必須實作 IEditableTextControl 介面。
ConfirmPassword:必須符合密碼的確認值。這個控制項是選擇項,它必須實作 IEditableTextControl 介面。
Question:所要建立之使用者的密碼問題。如果 RequiresQuestionAndAnswer 屬性為 true,則這個控制項是必要項,並且它必須實作 IEditableTextControl 介面。
Answer:所要建立之使用者的密碼答案。如果 RequiresQuestionAndAnswer 屬性為 true,則這個控制項是必要項,並且它必須實作 IEditableTextControl 介面。
Email:所要建立之使用者帳戶的電子郵件地址。如果 RequiresUniqueEmail 屬性為 true,則這個控制項是必要項,並且它必須實作 IEditableTextControl 介面。
ErrorMessage:顯示建立使用者帳戶失敗訊息。這個控制項是選擇項,它必須實作 ITextControl 介面。
ChangePassword.ChangePasswordTemplate
UserName:所要建立之使用者帳戶的帳戶名稱。如果 DisplayUserName 屬性為 true,則這個控制項是必要項,並且它必須實作 IEditableTextControl 介面。CurrentPassword:使用者帳戶的目前密碼。這個控制項是必要項,它必須實作 IEditableTextControl 介面。
NewPassword:使用者帳戶的新密碼。這個控制項是必要項,它必須實作 IEditableTextControl 介面。
ConfirmPassword:必須符合新密碼的確認值。這個控制項是選擇項,它必須實作 IEditableTextControl 介面。
FailureText:顯示建立使用者帳戶失敗訊息。這個控制項是選擇項,它必須實作 ITextControl 介面。
在登入控制項範本中參考控制項
若要在登入控制項範本中參考控制項,您可以對控制項樣板呼叫容器的 FindControl 方法。下表列出範本及其相關的容器屬性。
例如,如果您是在 CreateUserWizard 控制項之 CreateUserStep 步驟的 ContentTemplate 範本中,包含 ID 為 TimeZoneList 的 DropDownList 控制項,即可參考 DropDownList 控制項,其做法便是呼叫 CreateUserStep 屬性之 ContentTemplateContainer 容器的 FindControl 方法,如以下範例所示。
Protected Sub CreateUserWizard1_CreatedUser(sender As Object, e As EventArgs)
Dim timeZoneList As DropDownList = _
CType(CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("TimeZoneList"), DropDownList)
End Sub
protected void CreateUserWizard1_CreatedUser(object sender, EventArgs e)
{
DropDownList timeZoneList =
(DropDownList)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("TimeZoneList");
}