Dengan dirilisnya AJAX.NET BETA 2 hari ini, kita telah melihat betapa cepat dan efisiennya integrasi erat antara AJAX dan ASP.NET 2.0. Kita bahkan dapat membuat halaman web ASP.NET lebih efisien tanpa menulis satu pun kode JS. efek bebas dicapai dengan berjam-jam kode JS ditulis. Sangat mudah untuk mengintegrasikan semua ini ke dalam ASP.NET. Anda hanya perlu memindahkan kontrol ke kontrol UPDATEPANEL dan mengatur beberapa parameter. Namun, saat merasakan kemudahan yang diberikan AJAX.NET kepada pengembang, Anda juga akan menemukan bahwa AJAX.NET terkadang tidak sempurna. Sama seperti penulis baru-baru ini menemukan bug di kontrol Login ASP.NET 2.0 yang menyegarkan halaman setelah berhasil memverifikasi informasi pengguna di UPDATEPANEL.Tentu saja ini melanggar prinsip AJAX tanpa penyegaran metode verifikasi informasi identitas menemukan kode berikut:
private void AttemptLogin()
{
LoginCancelEventArgs args1 = baru LoginCancelEventArgs();
ini.OnLoggingIn(args1);
if (!args1.Batal)
{
AuthenticateEventArgs args2 = baru AuthenticateEventArgs();
ini.OnAuthenticate(args2);
if (args2. Diautentikasi)
{
//Setelah informasi pengguna berhasil diverifikasi, tulis informasi COOKIE untuk klien.
FormsAuthentication.SetAuthCookie(ini.UserNameInternal, ini.RememberMeSet);
this.OnLoggedIn(EventArgs.Empty);
//Pernyataan Respon berikut ini yang menyebabkan masalah. Melakukan operasi pengalihan pada kontrol UPDATEPANEL menyebabkan halaman disegarkan!
this.Page.Response.Redirect(ini.GetRedirectUrl(), false);
}
}
}
Dengan menganalisis metode AttemptLogin, tidak sulit untuk melihat bahwa ketika kita menekan tombol login dari kontrol Login dan berhasil memverifikasi informasi pengguna, pernyataan pengalihan halaman Response.Redirect akan dieksekusi (kode ini akan dieksekusi bahkan jika pengalihan halaman tidak ditentukan, dan defaultnya adalah halaman saat ini), dan justru karena pengalihan halaman itulah halaman tersebut disegarkan. Setelah Anda mengetahui penyebab kesalahannya, akan lebih mudah untuk menanganinya. Mungkin ada yang mengatakan bahwa kontrol khusus dapat mewarisi kontrol Login dan mengesampingkan metode AttemptLogin. Tapi adakah cara yang lebih mudah selain kontrol khusus? Jawabannya adalah ya. Karena mekanisme verifikasi bawaanlah yang menyebabkan halaman disegarkan, maka jangan gunakan proses verifikasi pada kontrol Login, namun gunakan metode khusus untuk menangani verifikasi identitas pengguna. Pertama, untuk menggunakan metode verifikasi khusus, pertama-tama kita temukan kontrol Login dan ubah menjadi template. Kemudian kita temukan kontrol LoginButton di template dan hapus CommandName="Login" sehingga kontrol tidak lagi menggunakan bawaan- dalam metode verifikasi. Sekarang kita memiliki informasi pengguna, mari tambahkan event OnClick ke LoginButton. Kodenya adalah sebagai berikut:
dilindungi kekosongan LoginButton_Click(pengirim objek, EventArgs e)
{
//Verifikasi apakah nama pengguna dan kata sandi sudah benar
if (Keanggotaan.ValidateUser(Login1.UserName, Login1.Password))
{
//Menurut analisis mekanisme verifikasi Login di atas, tulis COOKIE untuk klien.
FormsAuthentication.SetAuthCookie(Login1.UserName, Login1.RememberMeSet);
//Setelah verifikasi berhasil, Anda dapat melakukan beberapa pemrosesan di sini, seperti menyembunyikan kontrol Login.
Login1.Terlihat = salah;
}
kalau tidak
{
//Karena mekanisme verifikasi bawaan tidak digunakan, penanganan kegagalan verifikasi perlu diatur sendiri.
(Login1.FindControl("FailureText") as Literal).Text = "Nama pengguna atau kata sandi salah, silakan coba lagi!";
}
}
Analisis kode di atas. Informasi pengguna yang akan diverifikasi oleh kontrol Login disimpan dalam tabel aspnet_membership database Aspnetdb SQL2005. Dengan cara ini, kita dapat dengan mudah memverifikasi informasi pengguna dengan menggunakan metode Membership.ValidateUser verifikasi berhasil, ikuti analisis di atas Metode AttemptLogin menulis COOKIE untuk klien, dan kemudian menetapkan pesan kesalahan untuk kegagalan verifikasi. Kemudian kita dapat dengan mudah mengubah kontrol Login kita menjadi tidak lagi menyegarkan setelah berhasil memverifikasi informasi pengguna adalah tidak perlu menulis kustom Kontrolnya sama rumitnya dengan kontrol Login asli, dan efeknya persis sama dengan kontrol Login asli. Nama pengguna yang dibuat oleh kontrol CreateUserWizard masih dapat digunakan untuk verifikasi, dan kontrol terkait dengan kontrol Login seperti LoginStatus dan LoginName juga dapat digunakan seperti biasa.
PS: Jika PageRequestManagerParserErrorException terjadi ketika kontrol Login memverifikasi informasi pengguna, periksa apakah web.config berisi kalimat ini:
<httpModul>
.....
<tambahkan nama="ScriptModule" type="Microsoft.Web.UI.ScriptModule, Microsoft.Web.Extensions, Versi=1.0.61025.0, Budaya=netral, PublicKeyToken=31bf3856ad364e35"/>
</httpModules>
Terima kasih piring untuk mengingatkan
http://www.cnblogs.com/aspxcn/archive/2006/11/07/552927.html