مع إصدار AJAX.NET BETA 2 اليوم، رأينا مدى سرعة وكفاءة التكامل الوثيق بين AJAX وASP.NET 2.0، كما يمكننا أيضًا جعل صفحات ويب ASP.NET أكثر كفاءة دون كتابة كود JS واحد. يتم تحقيق التأثير المجاني من خلال كتابة ساعات من كود JS. من السهل جدًا دمج كل هذا في ASP.NET، ما عليك سوى نقل عنصر التحكم إلى عنصر التحكم UPDATEPANEL وتعيين بعض المعلمات. ومع ذلك، أثناء الاستمتاع بالراحة التي يوفرها AJAX.NET للمطورين، ستجد أيضًا أن AJAX.NET لا يكون مثاليًا في بعض الأحيان. تمامًا مثلما واجه المؤلف مؤخرًا خطأً في عنصر تحكم تسجيل الدخول إلى ASP.NET 2.0 والذي يعمل على تحديث الصفحة بعد التحقق بنجاح من معلومات المستخدم في UPDATEPANEL، فمن الواضح أن هذا ينتهك مبدأ عدم التحديث في AJAX بعد تحليل معلومات المستخدم المضمنة في عنصر تحكم تسجيل الدخول وجدت طريقة التحقق من معلومات الهوية الكود التالي:
Private void AttemptLogin()
{
LoginCancelEventArgs args1 = new LoginCancelEventArgs();
this.OnLoggingIn(args1);
إذا (! args1.Cancel)
{
AuthenticateEventArgs args2 = new AuthenticateEventArgs();
this.OnAuthenticate(args2);
إذا (args2.Authenticated)
{
// بعد التحقق من معلومات المستخدم بنجاح، اكتب معلومات ملف تعريف الارتباط للعميل.
FormsAuthentication.SetAuthCookie(this.UserNameInternal, this.RememberMeSet);
this.OnLoggedIn(EventArgs.Empty);
// عبارة الاستجابة التالية هي التي تسبب المشاكل. يؤدي إجراء عملية إعادة التوجيه في عنصر التحكم UPDATEPANEL إلى تحديث الصفحة!
this.Page.Response.Redirect(this.GetRedirectUrl(), false);
}
}
}
من خلال تحليل طريقة AttemptLogin، ليس من الصعب أن نرى أنه عندما نضغط على زر تسجيل الدخول لعنصر تحكم تسجيل الدخول ونتحقق من معلومات المستخدم بنجاح، سيتم تنفيذ بيان إعادة توجيه صفحة Response.Redirect (سيتم تنفيذ هذا الرمز حتى لو تم إعادة التوجيه لم يتم تحديد الصفحة، والصفحة الافتراضية هي الصفحة الحالية)، ويتم تحديث الصفحة على وجه التحديد بسبب إعادة توجيه الصفحة. بمجرد معرفة سبب الخطأ، سيكون من الأسهل التعامل معه، ربما سيقول شخص ما أن عنصر التحكم المخصص يمكنه أن يرث عنصر التحكم في تسجيل الدخول ويتجاوز طريقة AttemptLogin، ولكن هل هناك طريقة أسهل إلى جانب عناصر التحكم المخصصة؟ الإجابة هي نعم، نظرًا لأن آلية التحقق المضمنة هي التي تتسبب في تحديث الصفحة، فلا تستخدم ببساطة معالجة التحقق لعنصر التحكم في تسجيل الدخول، ولكن استخدم طريقة مخصصة للتعامل مع التحقق من هوية المستخدم. أولاً، من أجل استخدام طريقة تحقق مخصصة، نجد أولاً عنصر تحكم تسجيل الدخول ونحوله إلى قالب، ثم نجد عنصر تحكم LoginButton في القالب ونزيل CommandName = "Login" بحيث لا يستخدم عنصر التحكم المدمج. في طريقة التحقق الآن بعد أن أصبح لدينا معلومات المستخدم، فلنضيف حدث OnClick إلى LoginButton، ويكون الرمز كما يلي:
LoginButton_Click (مرسل الكائن، EventArgs e) باطل محمي
{
// التحقق من صحة اسم المستخدم وكلمة المرور
إذا (Membership.ValidateUser(Login1.UserName, Login1.Password))
{
// وفقًا للتحليل أعلاه لآلية التحقق من تسجيل الدخول، اكتب ملف تعريف الارتباط للعميل.
FormsAuthentication.SetAuthCookie(Login1.UserName, Login1.RememberMeSet);
// بعد التحقق الناجح، يمكنك إجراء بعض المعالجة هنا، مثل إخفاء عنصر التحكم في تسجيل الدخول.
Login1.Visible = false;
}
آخر
{
// نظرًا لعدم استخدام آلية التحقق المضمنة، يجب إعداد معالجة فشل التحقق بنفسك.
(Login1.FindControl("FailureText") as Literal).Text = "اسم المستخدم أو كلمة المرور غير صحيحة، يرجى المحاولة مرة أخرى!";
}
}
قم بتحليل التعليمات البرمجية أعلاه. يتم تخزين معلومات المستخدم التي سيتم التحقق منها بواسطة عنصر تحكم تسجيل الدخول في جدول aspnet_membership لقاعدة بيانات Aspnetdb الخاصة بـ SQL2005. وبهذه الطريقة، يمكننا بسهولة التحقق من معلومات المستخدم باستخدام طريقة Membership.ValidateUser تم التحقق بنجاح، اتبع التحليل أعلاه. تكتب طريقة AttemptLogin ملف تعريف الارتباط للعميل، ثم تقوم بتعيين رسالة الخطأ لفشل التحقق، ثم يمكننا بسهولة تحويل التحكم في تسجيل الدخول الخاص بنا إلى عدم التحديث بعد التحقق من معلومات المستخدم بنجاح هو أنه ليست هناك حاجة لكتابة عنصر التحكم المخصص، وهو معقد مثل عنصر تحكم تسجيل الدخول الأصلي، والتأثير هو نفسه تمامًا مثل عنصر تحكم تسجيل الدخول الأصلي، ولا يزال من الممكن استخدام اسم المستخدم الذي تم إنشاؤه بواسطة عنصر تحكم CreateUserWizard للتحقق وعناصر التحكم المتعلقة بالتحكم في تسجيل الدخول مثل LoginStatus وLoginName يمكن أيضًا استخدامها كالمعتاد.
ملاحظة: إذا حدث PageRequestManagerParserErrorException عندما يتحقق عنصر التحكم في تسجيل الدخول من معلومات المستخدم، فيرجى التحقق مما إذا كان web.config يحتوي على هذه الجملة:
<httpModules>
.....
<add name="ScriptModule" type="Microsoft.Web.UI.ScriptModule، Microsoft.Web.Extensions، الإصدار=1.0.61025.0، Culture=محايد، PublicKeyToken=31bf3856ad364e35"/>
</httpModules>
شكرًا لك على التذكير
http://www.cnblogs.com/aspxcn/archive/2006/11/07/552927.html