Daha önceki yazımda ASP.NET Membership kurulumuna bakmıştık. Şimdi de web uygulamamızda yeni üye oluşturma kontrolüne ve üye detay bilgileri kaydedilmesine bakalım.
Visual Studio Toolboxımızdan Login tabının altında “CreateUserWizard” kontrlünü sayfamıza sürüklüyoruz.
Görüldüğü gibi standart olarak User Name, Password, E-mail, ve Security Question/Answer alanları geliyor.
Fakat ihtiyacımız daha fazla ve farklı olabilir.
Mesela biz bunlara ek olarak; isim, soyisim, doğum tarihi, bizi nerden duydunuz, ve fotoğraf alanları da ekleyelim.
Bu kontrolü özelleştirmemiz için ilk önce kontrülün tasklerinden “Customize Create User Step” seçeneğine tıklıyoruz.
Kontrol bir tablo görünümüne geçiyor. Ve istediğimiz şekilde düzenliyoruz. Ben aralara yeni satırlar ekleyerek. Yeni textbox ve labelları ekledim ayrıca türkçeye çevirdim.
Burada küçük bir not; Eğer türkçeye çevirmesek bile regional setting ayarlarına bakarak otomatikmen türkçe gösteriliyor. Yani unicode yazılmış bir kontrol.
Ardından eklediğimiz bilgiler için veritabanında bir üye detay tablosu oluşturup membership tablolarından aspnet_Users isimli tabloyla Useridlerini bağlıyorum.
Kayıt için “prcUyeDetayKaydet” isminde basit bir store procedure oluşturuyorum;
CREATE PROCEDURE [dbo].[prcUyeDetayKaydet] @UserId uniqueidentifier, @UyeAdi nvarchar(50), @UyeSoyadi nvarchar (50), @DogumTarihi datetime, @UyelikTarihi datetime, @NerdenDuydunuz int, @PhotoId int as insert into dbo.UyeDetay values (@UserId, @UyeAdi, @UyeSoyadi, @DogumTarihi, @UyelikTarihi, @NerdenDuydunuz, @PhotoId)
Ve son olarak Visual Studio ya dönüyoruz, ve kontrolümüzün “CreatedUser” eventına şu kodları yazıyoruz.
Kod içerisinde yorum satırlarıyla ne yaptığımızı açıkladım;
// İlk önce kayıt olan kullanıcıyı daha önce oluşturulmuş olan "User" isimli role atıyoruz. Roles.AddUserToRole(CreateUserWizard1.UserName, "User"); // Guid türünden yeni üyeye verilen UserIdsini alıyoruz, sonrasında UyeDetay tablosuna eklenecek. Guid UserID = (Guid)Membership.GetUser(CreateUserWizard1.UserName).ProviderUserKey; // Üye detaylarını kontrolün içine eklediğimiz kontrollerden cast ederek çekiyoruz. string strIsim = ((TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("txtIsim")).Text; string strSoyIsim = ((TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("txtSoyisim")).Text; DateTime dogumTarihi = Convert.ToDateTime(((TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("txtDogumTarihi")).Text); int neredenDuydunuz = Convert.ToInt32(((DropDownList)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("cmbNerdenDuydunuz")).SelectedValue); FileUpload fuResim = ((FileUpload)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("fuResim")); // File upload kontolünde eklenmiş dosya kontrolünü yapıyoruz. Eğer varsa belirttiğimiz bir klasöre kaydediyor. int? resimId = null; if (fuResim.HasFile) { Bitmap newImage = new Bitmap(fuResim.FileContent); string path = Server.MapPath("~/User/Img/"); resimId = db.prcResimKaydet(path, null, null, DateTime.Now.Date, null); newImage.Save(Server.MapPath("~/User/Img/") + resimId.ToString() + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg); } // Yazıdığımız store procedure yukarıdaki değişkenleri parametre olarak gönderiyoruz. db.prcUyeDetayKaydet(UserID, strIsim, strSoyIsim, dogumTarihi, DateTime.Now, neredenDuydunuz, resimId);
Başka bir makalede görüşmek üzere.
Hoşkalın.
Achmedcim basarilarinin devamini dilerim.dunde baya membershipten konustuk gina geldi tamda uzerine makale yayinladin saol 😀
Ahmetcim Roles yazabilmek için System.Web.Security eklenmeli. Bende bunu eklim bari dedim 😀
Kesinlikle Selman; Bu ayrıntıyı vermen çok iyi oldu.
Ben yazarken direk ctrl+nokta ile yaptığımdan es geçmişim herhalde 🙂
//———
Roles classına erişebilmek için System.Web.Security name spacei eklenmiş olmalıdır.
//———
Aradığım temel konulardan biriydi.Gayet açıklayıcı olmuş Teşekkürler.
Yararlı olmasına sevindim. Ben teşekkür ederim.
İyi çalışmalar.
yazdığımız storage procedur ile db class arasındaki bağlantıyı nasıl gerçekleştireceğiz
Ben örneğimde LinQ kullandım. O yüzden procedure direkt method olarak geliyor.
Siz projenizde procedureleri nasıl çağırıyorsanız bunda da aynı şekilde uygulayabilirsiniz.
Önemli olan işin mantığı. Her yöntemde konsept aynı olacaktır.
İyi çalışmalar.
hocam işlemleri yaptım fakat aşağıdaki gibi bir hata veriyor. Ne yapmam lazım
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.
Compiler Error Message: CS0103: The name ‘db’ does not exist in the current context
Linq contentini ben db diye adlandırmıştım. Siz ne şekilde yapıyorsunuz? Kodları bire bir kopyaladığınızda bu hata olabilir.
“db” ismindeki linq objesini bulamadığını söylüyor.
Hocam merhaba asp.net üyelik sistemini web siteme entegre ettim. Haricinde veri tabanına kendi tablolarımıda ekledim. site şu şekilde çalışacak önce kullanıcıya bir aktivasyon kodu göndereceğiz. aktivasyonu veri tabanından kontrol edip varsa üyeliğe yönlendireceğiz. siteyi host a atınca aktivasyon kısmı çalıştı fakat üyelik için kullandığım hazır login sayfası sürekli hata veriyor. login kontrolünün web config deki bağlantı stringi aşağıdaki şekilde;
fakat ben kendi eklediğim tablolar için başka bir string tanımladım;
SqlConnection baglanti = new SqlConnection(“Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\ASPNETDB.mdf;Integrated Security=True;User Instance=True”);
aralarında fark yok ama login kontrolü hata veriyor. Hata şu şekilde;
Runtime Error
Description: An application error occurred on the server. The current custom error settings for this application prevent the details of the application error from being viewed remotely (for security reasons). It could, however, be viewed by browsers running on the local server machine.
Details: To enable the details of this specific error message to be viewable on remote machines, please create a tag within a “web.config” configuration file located in the root directory of the current web application. This tag should then have its “mode” attribute set to “Off”.
Notes: The current error page you are seeing can be replaced by a custom error page by modifying the “defaultRedirect” attribute of the application’s configuration tag to point to a custom error page URL.
hatasını veriyor. ne yaptıysam düzelmedi nerede yanlış yapıyorum acaba?
Devamı Oku: Asp.net üyelik Sistemi Hatası