کنترل CreateUserWizard از تعدادی رویداد تشکیل شده است. برای مثال؛ هنگام که بازدید کننده نام کاربری، گذرواژه و دیگر اطلاعات لازم را وارد کرد و بر روی دکمه Create User کلیک کند، کنترل CreateUserWizard رویداد CreatingUser را وادار عمل میکند. اگر در پروسه ایجاد کاربر اشکالی به وجود آید CreateUserError به کار گرفته میشود؛ همچنین اگر کاربر با موفقیت ایجاد شود رویداد CreatedUser اجرایی میشود.
در بعضی مواقع ممکن است ما بخواهیم در گردش کار کنترل CreateUserWizard دستکاری کنیم. برای روشن شدن این موضوع؛ اجازه دهید RegisterUser را با وارد کردن تعدادی اعتبار سنجی، توسعه دهیم. در این حالت اجازه ندهیم که نام کاربری شامل فضای خالی (space)؛ قبل و بعد و بین حروف؛ باشد. همچنین نام کاربری به هیچ عنوان در گذرواژه استفاده نشود.
برای انجام این کار باید یک عملیات رویداد برای رویداد CreatingUser ایجاد کنیم. اگر اطلاعات وارد شده معتبر نباشند، ایجاد کاربر باید منتفی شود. همچنین باید یک کنترل Label به صفحه اضافه کنیم تا پیام مربوط به نامعتبر بودن نام کاربری و یا گذرواژه را نمایش دهیم. با اضافه کردن یک کنترل Label در پایین کنترل CreateUserWizard کار را شروع میکنیم. ID آن را برابر InvalidUserNameOrPasswordMessage و ForeColor را برابر Red قرار میدهیم. متن Text آن را پاک کرده و مشخصههای EnableViewState و Visible آن را false میکنیم.
<asp:Label runat="server" id="InvalidUserNameOrPasswordMessage"
Visible="false" ForeColor="Red"
EnableViewState="false">
</asp:Label>
سپس کنترل CreateUserWizard را انتخاب کرده و در بالای پنجره Properties روی آیکن Events کلیک کنید تا رویدادها نمایش داده شوند. بروی رویداد CreatingUser دوبار کلیک کنید و کدهای زیر را وارد کنید:
protected void RegisterUser_CreatingUser(object sender, LoginCancelEventArgs e)
{
string trimmedUserName = RegisterUser.UserName.Trim();
if (RegisterUser.UserName.Length != trimmedUserName.Length)
{
// Show the error message
InvalidUserNameOrPasswordMessage.Text = "The username cannot contain leading or trailing spaces.";
InvalidUserNameOrPasswordMessage.Visible = true;
// Cancel the create user workflow
e.Cancel = true;
}
else
{
// Username is valid, make sure that the password does not contain the username
if (RegisterUser.Password.IndexOf(RegisterUser.UserName, StringComparison.OrdinalIgnoreCase) >= 0)
{
// Show the error message
InvalidUserNameOrPasswordMessage.Text = "The username may not appear anywhere in the password.";
InvalidUserNameOrPasswordMessage.Visible = true;
// Cancel the create user workflow
e.Cancel = true;
}
}
}
با استفاده از روشهای گوناگون میتوان CreateUserWizard را سفارشی نمود؛ از طریق مشخصات آن، کاستن و یا افزودن مرحله و رویدادهای آن. در این بخش میبینیم که چگونه ظاهر کنترل را از طریق مشخصات آن سفارشی کنیم؛ و در ادامه سفارشی ساختن رفتار کنترل از طریق رویدادهای آن را فرا میگیریم.
تمام متنهایی که به طور پیش فرض در کنترل CreateUserWizard نمایش داده میشوند از طریق مشخصات کنترل قابل تغییر هستند. برای مثال؛ متن برچسبهای User Name, Password, Confirm Password, E-mail, Security Question و Security Answer که در کنار جعبههای متن نمایش داده میشوند را میتوان با استفاده از مشخصههای UserNameLabelText, PasswordLabelText, ConfirmPasswordLabelText, EmailLabelText, QestionLabelText و AnswerLabelText سفارشی ساخت. همچنین مشخصههایی برای تعیین متن دکمههای Create User و Continue در CreateUserWizardStep و CompleteWizardStep وجود دارند.
علاوه بر مشخصههایی که مربوط به ظاهر هستند، بعضی از مشخصهها بر رفتار کنترل اثر میگذارند. مشخصه DisplayCancelButton از آن نوع است. اگر این مشخصه با مقدار true برابر شده باشد، در کنار دکمه Create User یک دکمه دیگر با متن Cancel نمایش داده میشود. اگر این مشخصه برابر true شد برای مشخصه CancelDestinationPageUrl باید نشانی یک صفحه مشخص کرد تا هنگام کلیک دکمه Cancel توسط کاربر، کاربر به آن صفحه هدایت شود. همانگونه که پیشتر گفته شد، با کلیک روی دکمه Continue در مرحله پایانی فقط یک Postback انجام میشود و کاربر در همان صفحه میماند. برای هدایت کاربر به صفحه دیگر بعد از کلیک دکمه Continue باید مشخصه ContinueDestinationPageUrl را با نشانی یک صفحه مقداردهی کنیم.
حالا در صفحه RegisterUser کنترل CreateUserWizard را طوری تغییر میدهیم که دکمه Cancel را نمایش داده و هنگام کلیک این دکمه و دکمه Continue کاربر به صفحه Default.aspx هدایت شود. برای انجام این کار مقدار مشخصه DisplayCancelButton را برابر True قرارداده و CancelDestinationPageUrl و ContinueDestinationPageUrl را برابر “~/Default.aspx” قرار دهید.
هنگامی که یک بازدید کننده نام کاربری، گذرواژه، رایانامه، پرسش امنیتی و پاسخ آن را وارد کرده و بر روی دکمه Create User کلیک میکند، یک کاربر جدید ایجاد شده و همزمان آن کاربر login میشود. شاید این امر از نظر کاربر بسیار خوب باشد که همزمان با ثبت نام، نام کاربری آن نیز فعال گشته و داخل سایت شود. اما، شاید از نظر شما بهتر باشد که بازدید کننده پس از ثبت نام login نشود. بدین منظور مشخصه LoginCreateUser را برابر false قرار دهید.
حساب کاربری در بستر عضویت شامل یک پرچم تایید (approved) است؛ کاربری که تایید نشده باشد نمیتواند داخل سایت شود (login کند). به طور پیش فرض، حساب کاربری جدید که ایجاد میشود، تایید نیز میگردد و کاربر میتواند همان لحظه وارد سایت شود. این امکان وجود دارد که کاربر جدید ایجاد شده تایید نشده (unapproved) باشد. شاید شما بخواهید کاربر جدید توسط مدیر سایت تایید شود؛ و یا ممکن است بخواهید قبل از اجازه ورود به کاربر جدید درستی رایانامه وارد شده را بسنجید. برای این کار بهتر است کاربر جدید هنگام ثبت نام تایید نشود؛ بدین منظور مشخصه DisableCreateUser را برابر true قرار دهید.
دو مشخصه دیگر که رفتاری هستند عبارتند از: AutoGeneratePassword و MailDefinition. اگر مشخصه AutoGeneratePassword برابر true قرار داده شود، جعبه متنهای گذرواژه و تکرار گذرواژه نمایش داده نمیشوند، به جای آن با استفاده از متد GeneratePassword در کلاس Membership به طور خودکار گذرواژه تولید میگردد. متد GeneratePassword یک گذرواژه بر اساس ساختار پیکربندی شده؛ کمترین تعداد حروف، کمترین تعداد حروف غیر الفبایی؛ تولید میکند.
مشخصه MailDefinition برای فرستادن رایانامه به نشانی وارد شده هنگام ثبت نام، بسیار کاربردی است. مشخصه MailDefinition دارای زیرمشخصههایی برای انجام تنظیمات فرستادن رایانامه میباشد. این زیرمشخصهها شامل: Subject, Priority, IsBodyHtml, From, CC و BodyFileName میباشد. مشخصه BodyFileName به یک فایل متنی و یا HTML اشاره میکند که متن رایانامه در آن قرار دارد. بدنه رایانامه دو placeholder (متاسفانه ترجمهای برای این به فکرم نرسید) را پشتیبانی میکند: <%UserName%> و <%Password%>. این دو با مقادیر وارد شده توسط بازدید کننده هنگام ایجاد کاربر جدید جایگزین میشوند.