Html Helper nasıl yazılır?

April 18, 2009 at 4:11 PMoozturk

Çok kolay yazılır. Bazı belirtilmesi gereken mecburi şeyler var onlara dikkat etmek gerekiyor o kadar. Nedir onlar?

- Bir class yaratmalısınız ve bu class static olmalı. Ayrıca eğer yazacağınız methodun Html class'ında görünmesini istiyorsanız class adınız Html olmalı ve partial olmalıdır. Yani:

     public static partial class Html

- Bu class içine yaratacağınız method'da aynı şekilde static olmalı, geriye string döndürmeli ve ilk değişkeni this htmlhelper helper olmalı (değişken adı size kalmış tabii). Bu arada HtmlHelper class'ı System.Web.Mvc namespace'i içinde bulunuyor. Yani:

     public static string Anchor(this HtmlHelper helper, string text, string link)

- Bu kadar.

 

Bir de örnek vereyim:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace DenemeMVC
{
    public static partial class Html
    {
        public static string Anchor(this HtmlHelper helper, string text, string link)
        {
            var builder = new TagBuilder( "a" );
            builder.MergeAttribute( "href", link );

            return builder.ToString( TagRenderMode.StartTag ) + text + builder.ToString( TagRenderMode.EndTag );
        }
    }
}

 

Mesela yukarıdaki kodu kullanarak Html.Anchor("Microsoft", http://www.microsoft.com) diye kullanabilirsiniz ve ortaya bir anchor çıkacaktır.

Bu olay tamamen Anonymous methods'dur, başka da birşey değildir esasen.

 

Kolay gelsin.

Posted in: ASP.NET | MVC

Tags: ,

MVC Preview 5'de Html.RadioButtonList vardı ancak güncel versiyonlarında yok, ne yapmalı?

April 17, 2009 at 5:37 AMoozturk

Evet yok. Ama bu bir kayıp değil. Çünkü radiobuttonlist'in amacı radiobuttonları gruplamak ve bunu Html.RadioButtonList olmadan da Html.RadioButton ile yapabiliriz.

Tek yapmamız gereken şey; gruplamak istediğimiz radiobuttonların isimlerini birbiri ile aynı vermek, bu kadar basit. Misal 10 tane ekleyecekseniz bir for döngüsü içinde yaratın radiobuttonları ve isimlerini aynı verin, değerleri ihtiyacınız olduğu gibi verin ve çalışacaktır.

Posted in: ASP.NET | MVC

Tags: , ,

Asp.Net MVC 1.0 Çıktı!

March 31, 2009 at 3:13 PMoozturk

Microsoft Asp.Net için MVC 1.0 çıktı!

Kurulum için önceki mvc versiyonlarını kaldırmanın yanında .net 3.5 için sp1'e de ihtiyacınız var. Kurulum için sp1 gerekmese de, kullanmak ve sorun yaşamamak için mutlaka sahip olmak gerekiyor. RC2 ile arasında hiçbir fark yok esasen ancak rc2 ile geliştirilmiş uygulamalarda bazı değişiklikler yapılması gerekiyor. Bütün yapmanız gerekenler için http://download.microsoft.com/download/A/6/8/A68968AE-DE1D-4FA4-A98A-B74042C6090D/ASP.NET%20MVC%20-%201.0%20Release%20Notes.doc dosyasını okumanızı tavsiye ederim.

 

İndirmek için microsoft.com sitesine göz atın, ya da buradan indirin (microsoft.com'dan direk link).

Posted in: .NET | ASP.NET | MVC

Tags: ,

ASP.NET'te Login olan kullanıcı nasıl yönlendirilir?

March 26, 2009 at 10:52 AMoozturk

ASP.NET bildiğiniz gibi roles, profiles, members, vs.. bir sürü özelliği zaten içinde barındırıyor ve ayrıca bir daha bunlar için efor sarfetmeye gerek bırakmıyor. Bunları kullanıyoruz ancak login kontrolü birçok sayfaya uymuyor ve kullanmıyoruz ya da template'e çevirip sonra değiştiriyoruz. Peki bu durumda nasıl yönlendirme yapacağız?

 

Eğer login kontrolü kullanıyor olsaydık, zaten Loggedn event'i ile bunu yapmak çok kolay olurdu ama kullanmıyoruz, o zaman aşağıdaki gibi bir çözüm var.

 

Kullanıcı; kullanıcı adını ve şifresini yazıp da giriş tuşuna bastığında aşağıdaki koda benzer bir kod yazarak istediğimiz gibi yönlendirebiliriz.

 

        if (Membership.ValidateUser(txtUsername.Text, txtPassword.Text))
        {
            bool rtnVal = false;
            if (chkRememberMe.Checked)
                rtnVal = true;

            FormsAuthentication.SetAuthCookie( txtUsername.Text, rtnVal );


            if( buraya gereklı durumu yazın )
                Response.Redirect( "adresi de buraya" );
            else
                Response.Redirect( "ya da buraya" );
        }

 

Yukarıdaki kod'da bir checkbox da var ve eğer kullanıcı isterse bir cookie yaratıp kullanıcı daha sonra tekrar geldiğinde bir daha giriş yapmasına gerek kalmaz. Önce kullanıcnın belirttiği bilgileri kontorl ediyoruz, daha sonra setAuthCookie ile gerekli session ve cookie lerin düzenlenmesini sağlıyoruz. En altta ise dilediğimiz gibi yönlendiriyoruz.

 

Bu kadar basit.

Posted in: ASP.NET

Tags: ,

MVC kullanırken Controller ve View'lar klasörler altına nasıl toplanır.

March 7, 2009 at 9:31 AMoozturk

Bildiğini gibi (MVC - Model View Controller) kullanırken dosyalarınız Models, views ve controllers klasörleriniz altında toplanır ve bir controller'dan bir action çağırdığınıza ona rastlayan view derlenir ve kullanıcıya gösterilir. Ancak dosyalarınızın yönetimini kolaylaştırmak, erişim hakları hakkında daha rahat yönetim yapmak, vs.. gibi kaygılar yüzünden daha fazla alt klasör kullanmak isterseniz yapmanız gereken bazı şeyler var diyebilirim.

Öncelikle sadece dosyaları aynı hiyerarşi doğrultusunda hazırlayalaım ve çıkacak hata doğrultusunda ne yapmamız gerektiğine gidelim, bu sayede ne yapmaya neden ihtiyacımız olduğunu da görürüz.

Örneğimizde; yönetici işlerini ayırmak için Admin diye bir klasör kullanmak istediğinizi ve bu admin klasörü altında da işleri kategorize ederek farklı klasörlere koymak istediğinizi varsayalım.

 


Burada gördüğünüz gibi Controllers klasörümüzde Admin adında bir klasörümüz ve içinde de MessageProblemsController.cs adında bir dosyamız var. Views klasörümüzde de Admin klasörü altında - olması umulduğu gibi- MessageProblems adında bir klasörümüz var ve içinde Index.aspx diye bir dosyamız var. Burada amacımız yöneticinin girip Mesaj problemleri listesini görmesi olsun. Eğer istersek Index.aspx yanına Edit.aspx, Insert.aspx gibi ekleme, değiştirme özelliklerini de ekleyebilir ve messageproblemscontroller.cs dosyamızın içine Edit ve Insert View Action'larını yazarak bu özellikleri de elde edebiliriz. Örnek amacından şaşmasın diye yalnızca Index.aspx ile anlatıyorum.MessageProblemsConroller.cs dosyasının içine aşağıdaki kodu ekleyelim.

 

        public ActionResult Index()
        {
            return View();
        }

 

Örneğimizi çalıştırırsak ve /Admin/MessageProblems yazarsak tarayıcımıza, bulunamadı hatası alacağız. Peki neden?

Çünkü global.asax dosyasına bakarsak bir route hazırlandığını ve kaydedildiğini - kullanılıyor olduğunu - göreceğiz. Bu route'u bir inceleyelim.

 




Burada bir default adında route tanımlanmış, önce controller adının beklendiği, sonra action adının beklendiği daha sonra da id özelliğinin beklendiği belirtilmiş. Öntanımlı değerler olarak da Home controller'ının, Index hareketi tanımlanmış. Biz bir admin klasörü altında controller'larımızı koyuyoruz haliyle görülemiyor ve açılamıyor bu route ile. Demek ki bir route daha yazıp admin klasörünün altında da controller araması gerektiğini bildirmeliyiz.

 




Mavi ile işaretli alana bakarsanız admin adında bir route daha tanımladğımızı görürsünüz. Buradaki tek fark admin klasörünün de içine bakılması gerektiğini bildirmiş oluyoruz. Şimdi çalıştırdığımızda bu sefer bazı klasörlerin altında aradığını ancak bulamadığı konusunda hata verecektir. Bu sefer sorun nedir, nereye bakıp nasıl çözmeliyiz?

Bu sefer ki sorun, controller çalıştığı halde istediğimiz view dosyasına ulşamaması. Bunun için de view dosyasını bulmasına yardımcı olmamız lazım. Bunun için model klasörünün altına bir kod dosyası yaratın, mesela adı adminviewengine.cs olsun ve içine aşağıda yazan kodu yazın ve kaydedin.

 

 




Bu işlemi de yaptıktan sonra global.asax dosyasındaki RegisterRoutes fonksiyonuna şu satırı da eklemeliyiz.

ViewEngines.Engines.Add(new AdminViewEngine());

 

Çalıştırdığımızda herşeyin doğru çalışıyor olduğunu göreceksiniz.

 

Artık yalnıca Controllers, Views klasörlerine mahkum değilsiniz. Büyük uygulamalar yaratırken yüzlerce hatta binlerce view ya da controller'a ihtiyacınız olacaktır, bunları bu şekilde kategori edebilirsiniz.

Not: Bu örnek Microsoft Asp.NET MVC RC2 ile hazırlanmıştır, daha alt ya da daha üst RC sürümlerinde ya da tam sürümünde değişiklik olabilir ve çalışmayabilir.

İyi çalışmalar.

Posted in: ASP.NET | MVC

Tags: , , ,

Rss ve Atom syndication için asp.net 3.5 ile çok kolay bir çözüm var

February 20, 2009 at 6:45 PMoozturk

Siteleri takip ederken artık tek tek gezmek yerine rss gibi yenilikler kullanmaya başladık. Eh, hazırladığımız sitelere bunları eklemenin asp.net 3.5 ile çok kolay bir yolu var, Wcf Syndication Service Library! Wcf hakkında neredeyse hiçbir şey bilmenize gerek yok, hatta hiç yok. Zaten Visual Studio size gerekli bütün kodu veriyor, tek yapılması gereken listeye maddeleri eklemek.

Bir örnek vereyim.

1. Visual Studio 2008'de yeni bir proje yaratmak için açılan pencereden WCF - Syndication Service Library'yi seçin, projenize istediğiniz ismi verin ve projenizi yaratın.

2. Aşağıdaki kodu elde etmiş olacaksınız

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Syndication;
using System.ServiceModel.Web;
using System.Text;

namespace SyndicationServiceLibrary1
{
    // NOTE: If you change the class name "Feed1" here, you must also update the reference to "Feed1" in App.config.
    public class Feed1 : IFeed1
    {
        public SyndicationFeedFormatter CreateFeed()
        {
            // Create a new Syndication Feed.
            SyndicationFeed feed = new SyndicationFeed("Feed Title", "A WCF Syndication Feed", null);
            List<SyndicationItem> items = new List<SyndicationItem>();

            // Create a new Syndication Item.
            SyndicationItem item = new SyndicationItem("An item", "Item content", null);
            items.Add(item);
            feed.Items = items;

            // Return ATOM or RSS based on query string
            // rss -> http://localhost:8731/Design_Time_Addresses/SyndicationServiceLibrary1/Feed1/
            // atom -> http://localhost:8731/Design_Time_Addresses/SyndicationServiceLibrary1/Feed1/?format=atom
            string query = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters["format"];
            SyndicationFeedFormatter formatter = null;
            if (query == "atom")
            {
                formatter = new Atom10FeedFormatter(feed);
            }
            else
            {
                formatter = new Rss20FeedFormatter(feed);
            }

            return formatter;
        }
    }
}

3. Yukarıdaki kodun bir kısmını aşağıda tekrar veriyorum, tek yapılması gereken onu değiştirmek.

// Create a new Syndication Item.
SyndicationItem item = new SyndicationItem("An item", "Item content", null);
items.Add(item);

Burada misal veritabanından gerekli verileri çekip istediğiniz gibi item(lar) yaratın. null değeri gördüğünüz alana eğer bir link yazarsanız, rss'i takip edenlerin konuyla alakalı içeriğinize ulaşabilmeleri için bir link de yaratılıyor.

Eğer resim eklemek ya da satır atlamak istiyorsanız; "Item Content" kısmına, istediğiniz şeylerle alakalı html kodu yazabilirsiniz. Bu sayede daha iyi bir görüntüde elde edersiniz.

Misal vereyim:

SyndicationItem item = new SyndicationItem("Başlık 1!", "<font face=\"Arial\" Size=\"2\">Deneme<br/><a href="www.tamiyi.com>www.tamiyi.com</a><br/><img src=\"www.site.com/resim.gif\"/> ", "http://www.tamiyi.com");

Bu kadar basit!

 

Bunu publish ettiğinizde gayet hızlı ve başarılı bir çözüm elde etmiş olursunuz. Artık tek yapmanız gereken link vermek istediğiniz yerlere link vermek.

Bunu da:

Rss için: http://.../SyndicationServiceLibrary1/Feed1/

Atom için:  http://.../SyndicationServiceLibrary1/Feed1/?format=atom

Adresleri ile yapabilirsiniz.

 

Eğer tarayıcıların (browser) sitenizde rss ya da atom gibi bir syndication özelliği olduğunu anlamasını istiyorsanız Hazırlanan rss feed'i tarayıcının otomatik olarak bulması nasıl sağlanır? başlıklı yazımı okumanızı tavsiye ederim.

Posted in: ASP.NET | Web Service | Rss | WCF

Tags: , , ,

Meta bilgisi asp.net ile nasıl eklenir?

February 3, 2009 at 1:42 PMoozturk

Meta bilgilerini web tarayıcılara bazı durumlarda ne yapmaları gerektiğini ya da arama motorlarına hangi kelimelerle siteleri bulmaları gerektiği gibi başka hususlar için kullanırız. Bazen bunları yalnızca bazı sayfalarda kullanmak isteyebiliriz, özellikle sayfayı runtime esnasında yaratıp yazıyorsak ya da masterpage kullanıyorsak bu işi mecburen asp.net kodu olarak yazmak zorunda kalırız. Bunun için System.Web.UI.HtmlControls.HtmlMeta objesini kullanıyoruz. Aşağıda örnek veriyorum.

 

Mesela bir sayfanın expire olmasını istiyorsak, HttpEquiv tanımlamamız gerekir. Kod:

HtmlMeta meta1 = new HtmlMeta();

HtmlMeta meta2 = new HtmlMeta();

meta1.HttpEquiv = "PRAGMA";

meta1.Content = "NO-CACHE";

meta2.HttpEquiv = "EXPIRES";

meta2.Content = "-1";

Page.Header.Controls.Add(meta1);

Page.Header.Controls.Add(meta2);

Posted in: ASP.NET

Tags: , , , , , , , , ,

Web uygulamalarında gerekli sayfaların ssl ile açılmaya zorlanması (ve diğer sayfaların cleartext olarak açılmaya zorlanması)

January 30, 2009 at 12:33 AMoozturk

Bu soruna çözüm üretmek için esasen her ssl gereken sayfanın OnInit event'ine request.IsSecureConnection değerine göre bir Response.Redirect komutu ile yönlendirmek yeter. Ancak her sayfa için bunu yapana kadar hele hele bir de response.redirect diye yapılacak yönlendirme için sürekli if conditionlar ile yorulana kadar daha kolay bir çözüm bulmak daha mantıklı geliyor kulağa.

 

Bunun için internette arama yaparken güzel bir çözüm buldum. Keith Brown tarafından yazılmış olan SslHelper - Get help running a partial SSL website in ASP.NET adlı makalede güzel bir çözüm var. Bu çözümü biraz modifiye ettim ve aşağıdaki gibi bir çözüm daha kolay oldu.

 

Adımlara bakalım 

1.  Aşağıdaki dosyayı uygulamanıza ekleyin.

   PageBases.cs (3,00 kb)

2. SSL istediğiniz sayfalara şu ayarı yapın.

   Kod görünümündeki sayfanın class tanımlama satırındaki Page (System.Web.UI.Page) değeri yerine SecurePage yazın

3. SSL istemediğiniz sayfalara şu ayarı yapın.

   Kod görünümündeki sayfanın class tanımlama satırındaki Page (System.Web.UI.Page) değeri yerine PlainPage yazın 

4. Test edin.

   Visual studio'nun web server'ının SSL desteği yoktur. Bu sebeple eğer bu özelliği kullanıyorsanız sayfa açılmayacaktır! Visual Studio ile SSL sayfalarına sahip bir web uygulamasının debug için ayarlanması (Visual Studio Web Server'ın https yani ssl bağlantılarını kabul etmesinin sağlanması) yazımı okursanız, bu soruna da kolaylıkla çözüm bulabilirsiniz.

 

Posted in: ASP.NET

Tags: , , , , , , ,

Visual Studio ile SSL sayfalarına sahip bir web uygulamasının debug için ayarlanması (Visual Studio Web Server'ın https yani ssl bağlantılarını kabul etmesinin sağlanması)

January 29, 2009 at 11:51 PMoozturk

Web uygulaması geliştirirken haberiniz olsun, visual studio'nun yanında gelen ve otomatik olarak kullanılan web server'ın ssl desteği yoktur. Ancak Visual studio geliştiricilerinden birinin geliştirmiş olduğu bir web server var ve tam olarak visual studio'nun yanındagelen web server'ın yerine oturuyor. Bunun yanı sıra https protokolüne ihtiyaç duyduğunuz yani ssl desteğine ihtiyaç duyduğunuz uygulamaların debug'ı için zaten IIS kullanma daha mantıklı gibi gözüküyor. Gerek logging özellikleriyle, gerek her adımın takibinin kolaylığı açısından daha üstün. Ben yine de hem IIS'in yapılandırılmasını anlatacağım hem de yazının en altında diğer alternatif web server için adres vereceğim.

Bunun yanı sıra eğer aradığınız şey IIS ya da web server yapılandırmasından farklı olarak, uygulamanızdaki ssl gerektiren sayfaların zorla https kullanmalarını sağlamak ise bunu da Web uygulamalarında gerekli sayfaların ssl ile açılmaya zorlanması (ve diğer sayfaların cleartext olarak açılmaya zorlanması) adlı yazımda bulabilirsiniz.

 

IIS 7.0'ın SSL için yapılandırılması

1. Bir websitesi yaratın.

   IIS içindeki defaut web site'ı durdurun. Sonra bir başka site yaratın. (adını siz belirleyin ama nerede barınacağı sorusuna projenizin dosyalarının bulunduğu dizini seçin. Örn. c:\users\kullanıcıadınız\documents\visual studio 2008\websites\projedosyalarınızınbulunduğudizin)

2. Gerekli izinleri verin

   Birinci adımda belirttiğiniz klasöre IIS_IUSRS kullanıcısına tam yetki verin. (Özellikler -> Güvenlik)

3. Bir SSL sertifikası yaratın

 IIS paneli içinde bulunan soldaki ağaçtaki en üst satırı seçin (Bilgisayarınızın adının yazılı olduğu), bu seçim ile IIS server ayarlarına gitmiş olacaksınız. Burada Server Certificates'ı bulun ve açın. Sağdaki menüden Create Self-Signed Cretificate seçeneğini seçin ve adımı tamamlayın (istediğiniz gibi değerler verin).

4. Bu websitesinin binding özelliklerini değiştirin.

 İlk adımda yarattığınız web sitesini açın, sağda çıkan menüden Bindings... tuşuna basın ve açılan pencere vasıtasıyla http ve https sekleyin. Https eklerlen size certifıcate soracaktır, ikinci adımda yarattığınız sertifikayı seçin.

 

Visual Studio üzerinden projenizde değişiklikler yapın

1. Projenin özelliklerini açın

   Projeniz üstünde sağ kulakçıkla açacağınız menüden properties'i açın

2. Kullanılacak server değerini değiştirin.

   Çıkan pencerede soldaki menüden start options'ı açın ve Server ayarlarındaki Use Custom Server seçeneğini seçin ve http:// değerinden sonra bilgisayarınızın adını yazın.





Her debug için yapın

1. Publish edin

   Projenizi debug etmeden önce yaptığınız değişikliklerin yansıması için publish edin. Publish ederken IIS üzerinde yarattığınız web sitesine göre bir adres vermeniz gerekecektir. (Direk http://bilgisayaradı olarak ayarlamadıysanız buraya dikkat edin)

2. F5'e basın.

 İşte bu kadar.

 

Bu kadar basit. Tabii birden fazla server'ın olduğu bir bilgisayarda ayarlar biraz daha farklı olacaktır, bu farklılıklar bindings değerleri verilirken yapılmalıdır. Zaten kullanımda olan portlar yerine başka portlar kullanılmak ya da hostname değerinin farklı kullanılması gerekebilir.

 

Söz verdiğim gibi bir diğer seçenek olan web server'ı değiştirmeye gelince...

Posted in: ASP.NET | Visual Studio

Tags: , , , , , ,

Anonymous User, Logged In User nasıl kullanılır?

January 20, 2009 at 10:54 AMoozturk

Merhaba,

Hazırladığımız web sitelerinde hem kayıtlı kullanıcıların hem de anonim kullanıcıların haklarını ayarlarız, bazı bilgilerini saklarız ve daha sonra gösteririz. Bütün bunları da kod içerisinde yaparız. Aşağıda aklıma gelen bazı merak edilen ayrıntıları vereceğim, bunlar dışında sorununuz olursa bana e-posta atarsanız size hemen cevap verir ve bu listeye sorunuzun cevabını eklerim.

 

- Kayıtlı kullanıcının ID'sini nasıl alırım?

Kayıtlı kullanıcının ID'si aşağıdaki kod ile alınabilir.

     (Guid)Membership.GetUser(HttpContext.Current.User.Identity.Name).ProviderUserKey;

-Aspnet_Profile tablosundaki UserId kolonu ile Aspnet_Users tablosundaki arasında fark var mıdır? Varsa fark nedir?

Aralarında fark vardır. Aspnet_Users tablosunda yalnızca kayıtlı kullanıcıların listesi ve özellikleri barındırılırken, aspnet_Profile tablosunda kayıtlı ve kayıtsız (web.config dosyasında izin verildiği taktirde kayıtsız kullanıcıların da bilgileri saklanır)  kullanıcıların bilgileri saklanır. Ayrıca aspnet_profile tablsounda aspnet_Users tablosunda bulunan özellikler saklanmaz, onun yerine bizim saklamak istediğimiz başka değerler saklanır. (Örn. Son bakılan ürün kodu, Telefon numarası, vb...) Aradaki bu farktan ötürü Profile tablosunda UserId kolonunda anonymous (kayıtsız) kullanıcılar için otomatik olarak bir UserId yaratılır ve bu UserId değeri kod esnasında AnonymousID (Request.AnonymousID) olarak anılır. Eğer aspnet_Profile tablosunda değer(ler) saklayıp sonra onlara ulaşabilmek isterseniz ya da aspnet_Profile tablosundaki UserId değerine bağlı başka tablolarınız varsa kullanmanız gereken ID; Kayıtsız kullanıcılar için AnonymousID, kayıtlı kullanıcılar için ise UserId oluyor (Bu UserId'nin nasıl alınacağını bu makale içindeki bir önceki soruda cevapladım).

-Kayıtsız bir kullanıcımın profile'ında bazı değerler saklıyorum, bu kullanıcı kayıt olduğunda bu sakladığım değerleri nasıl kayıtlı kullanıcının değerlerine taşırım?

Bunun için Global.asax dosyasında bir event'i handle etmek gerekiyor.

     void Profile_OnMigrateAnonymous(object sender, ProfileMigrateEventArgs e)

Bu event'i yukarıdaki fonksiyonu global.asax dosyasının içine yazdıktan sonra, içine istenilen komutlar yazılabilir. Ancak bu konuda dikkat edilmesi gereken bazı hususlar var. İlk olarak kayıt olan kullanıcının kayıt olmadan önceki profile tablosunda saklanan değerleri otomatik olarak silinmez bunu silmek gerekir. Aynı şekilde kullanıcının cookie'sinde saklanan anonymousId değeri de silinmelidir. Bu iki işilem için aşağıdaki kodu da OnMigrateAnonymous fonksiyonunun içine yazmalıyız.

        AnonymousIdentificationModule.ClearAnonymousIdentifier();
        ProfileManager.DeleteProfile(e.AnonymousID);

Yani özet olarak aşağıdaki kodu yazmalıyız Global.asax dosyasının içine;

    void Profile_OnMigrateAnonymous(object sender, ProfileMigrateEventArgs e)
    {
        //Burada bir profile yaratıp içine değerleri kopyalamalı

        ProfileCommon pfcT= Profile.GetProfile(e.AnonymousID);

        Profile.TelNo = pfcT.TelNo;

        Profile.Save();

        AnonymousIdentificationModule.ClearAnonymousIdentifier();
        ProfileManager.DeleteProfile(e.AnonymousID);       
    }

 

- Profile kullanımını nasıl aktif hale getirebilirim? Bazı değerlerin kayıtsız kullanıcılarda da geçerli olması için ne yapmalıyım?

Profıle kullanımını aktif hale getirmek için web uygulamasının kök (root) klasöründeki web.config dosyasına aşağıdakine benzer bir kod yazmak gerekiyor.

<system.web> altına şunları yazmalıyız.

        <anonymousIdentification enabled="true" cookieName="deneme.anonyous" cookiePath="/" cookieless="UseCookies" cookieRequireSSL="true" domain="deneme.com"/>
        <profile enabled="true" automaticSaveEnabled="false" defaultProvider="DenemeProfileProvider">
            <providers>
                <clear/>
                <add connectionStringName="BaseSQL" name="DenemeProfileProvider" type="System.Web.Profile.SqlProfileProvider"/>
            </providers>
            <properties>
                <clear/>
                <group name="Genel">
                    <add name="FirstName" type="System.String" allowAnonymous="true"/>
                    <add name="LastName" type="System.String" allowAnonymous="true"/>
                    <add name="DateOfBirth" type="System.DateTime"/>
                    <add name="Sex" type="System.Boolean"/>
                </group>
                <group name="Iletisim">
                    <add name="CepTel" type="System.String"/>
                    <add name="YerelTel" type="System.String"/>
                    <add name="EMail" type="System.String" allowAnonymous="true"/>
                </group>
            </properties>
        </profile>

 

Bu örnekteki bazı satırların içinde allowAnonymous="true"ibaresi var, bu ibare sayesinde kayıtsız kullanıcılarında bu özelliklere sahip olması sağlanmış oluyor.

Şimdilik aklıma gelenler bunlar. Aklıma geldikçe eklemeye devam edeceğim.

İyi çalışmalar dilerim.

Posted in: ASP.NET

Tags: , , , , , , , , , , , ,