29 Nisan 2013 Pazartesi

İpucu - Jquery ajax ile site dışında bir url'i çağirma


$.ajax(

url: url + "&callback=?",
dataType: "jsonp" 
}
);

Burada ki iki önemli noktadan birincisi çağırmak istediğiniz url'in sonuna querystring olarak "&callback=?" eklemek.
İkinci olarakta dataType'ı "jsonp" olarak belirtemek.

Bu işlemi yapmanın bir diğer yolu:

$.getJSON(url+ "&format=json&callback=?",  
       function(data) {
                       doSomethingWith(data);
                      });

şeklinde request atmaktır. Burada da görüldüğü gibi url'in sonuna format ve callback querystringleri eklenmiştir. Virgülden sonra yazılan fonksiyon request sonucunda bize dönen data üzerinde işlem yapmak için kullanılabilir.

Normal şekilde request atmamızın engellenmesinin sebebi "Same Origin Policy" yada Türkçe adıyla "Aynı Kaynak Politikası" bunun sebebini ve teknik yönlerini incelemek için asağıdaki linki inceleyebilirsiniz:
http://en.wikipedia.org/wiki/Same_origin_policy

27 Nisan 2013 Cumartesi

Hata - 'Unable to serialize the session state.'

Bir önceki yazıda Asp.NET Session'ının SQL Server'da saklanması işlemini anlatmıştık. Eğer bu yönetimi kullanıyorsanız aşağıdaki hatayla karşılaşmış olabilirmisiniz.


Unable to serialize the session state. In 'StateServer' and 'SQLServer' mode, ASP.NET will serialize the session state objects, and as a result non-serializable objects or MarshalByRef objects are not permitted. The same restriction applies if similar serialization is done by the custom session state store in 'Custom' mode.

Eğer bu hatayı alıyorsanız session'da serializable olmayan bir nesne atmaya çalışıyorsunuz demektir. Bu hatayı çözmek için yapmanız gereken tek şey atamaya çalıştığınız nesneye ait class tanımlamasında [Serializable] etiketini kullanmanız yeterli olacaktır.
--
Bilgi paylaştıkça büyür...


Asp.Net Session'ını SQL Server üzerinde tutma

Bildiğiniz üzere Asp.Net uygulamalarında Session oturum bazlı verileri saklamak için kullanılan bir yöntemdir. Asp.Net uygulamanıza ait bu Session değerlerinizi SQL Server üzerinde saklamak istiyorsanız aşağıdaki adımları izlemeniz yeterlidir.

Neden SQL Server'da session değerlerini saklayayım sorusuna cevap:
"Uygulamaları buluta (örn: Azure) almak ve sunucu çiftliklerinde çalıştırmak için gerekli bir yöntem. Eskiden fiziksel load balancer'lar "sticky session'lar" ile bunu yönettiği için pek ihtiyaç olmazdı ama artık sunucular sanal olduğu için onlara güvenmek yerine SQL Server'a güveniyoruz." (Teşekkürler Ekin Çağlar :))

Adım1: Aspnet_regsql ile session'ın tutulacağı veritababını oluşturmak.
Bu veri tabanını oluşturmak için command prompt'u açıp aşağıdaki resimde gördüğünüz klasörde bulunan 'aspnet_regsql.exe' dosyasını çalıştıracağız.

Komut: aspnet_regsql.exe -S localhost -E -ssadd -sstype p


Bu komutu çalıştırdıktan sonra SQL Server'da ASPState isimli veri tabanını görebilirsiniz.


Adım2: Asp.NET projenizde web.config dosyasında session düzenlemesi.
Web.config dosyasında sessionstate etitekini aşağıdaki gibi değiştirirseniz artık session'larınız sql server saklanacaktır.

<sessionState mode="SQLServer" customProvider="DefaultSessionProvider" timeout="60" allowCustomSqlDatabase="false" sqlCommandTimeout="3600" sqlConnectionString="Server=localhost;User ID=kadir;Password=7a3g6b18b2c63;">

--
Bilgi paylaştıkça büyür...

18 Nisan 2013 Perşembe

İpucu - Jquery selector

Jquery kullanırken id'si istenilen bir kelime ile başlayan elementleri nasıl bulacağınız sorunun cevabı, buyrun;

Kullanım şekli;
div[id ^ = "xxxx"]

Örnekle ifade edelim. Aşağıda gördüğünüz gibi farklı id'lere sahip div'ler mevcut. id'si "user_" ile başlayan bu divleri seçebilmek için aşağıdaki kodu kullanabilirsiniz.

<div id="user_1366bcf0-af25-42de-820b-63b7f23788e0">...</div>
<div id="user_ee018e81-7bfn-4825-00c6-2c1230ca65b6">...</div>
<div id="user_cb33efcc-8h61-4c3c-867a-83ba95a24400">...</div>


$userItems = $('#div[id ^= "user_"]');                       

Şunu düşünüyor olabilirsiniz. Bunların hepsini tek bir div'e alır onun altındaki div'leri bulabilirim diyor olabilirsiniz. Fakat bu verdiğim örnek özellikle bu div'ler aynı sayfada farklı frame'ler içerisinde kullanılıyorsa ihtiyaç duyulacaktır ;)


İpucu - Jquery kendo ui grid refresh

Bildiğiniz gibi kullanılan grid'lerde kayıt silme veya güncelleme işleminden sonra o grid'in tekrar yüklenmesi gerekir. Eğer kendo ui grid kullanıyorsanız aşağıda tanımladığım reload metodunu kullanarak bu işlemi gerçekleştirebilirsiniz.

Öncelikle basit bir kendo ui grid tanımlaması örneği gösterelim.









Yukarıda görüldüğü üzere "read" işleminde "GetAllUsers" metodunu çağırarak grid'i bind ediyor. Herhangi bir işlemden sonra grid'i refresh etmek için de aşağıdaki kodu kullanabilirsiniz.

    var $dgUsers;
    $(document).ready(function () {
        $dgUsers = $('#dgUsers'); 
    });

    function dgUsers_reload() {
        $dgUsers.data("kendoGrid").dataSource.read();
    }

Bu kendo grid de nedir ki diyenlere ;) http://demos.kendoui.com/web/grid/index.html

11 Nisan 2013 Perşembe

CKEditor olaylar - mode(source/wysiwyg) değişimi


CKEditor kullanırken eğer ekstra kendi oluşturduğunuz pluginler varsa, source ve wysiwyg geçişlerinde bu pluginlerle ilgili tasarımsal ve işlevsel bozukluklar oluşabiliyor. Bu nedenle CKEditor üzerinde source ve wysiwyg değişiminde bazı işlemler yapmak isteyebilirsiniz. Bunun için CKEditor'deki tanımlı olan olayları kullanırsınız. 'Mode' olayı bu geçişi yönetmenizi sağlayacaktır. Aşağıdaki örnekte instanceReady ve mode olayları tanımlanıyor.


CKEDITOR.on('instanceReady', function (ev) {                    
    editor = ev.editor;                                         
    //editor.setReadOnly(true);                                 
    //CKFinder.setupCKEditor(editor, '../ckfinder/');                      
    editor.on('mode', function () {                             
        if (editor.mode == 'wysiwyg') {                         
            //...                                               
        }                                                       
        else                                                    
        {                                                       
            //...                                               
        }                                                       
    });                                                         
});                                                             

T-SQL hata yönetimi (try catch kullanımı)

Konu Başlıkları

  1. Try – Catch Nedir?
  2. Try – Catch Kullanımı
  3. Try – Catch’in Çalışma Mantığı
  4. Hata Fonksiyonları

1 - Try – Catch Nedir?


Try-Catch hata kontrolü için kullanılan bir T-Sql ifadesidir. Sql Server’da oluşabilecek hataları yakalamak için kullanılır.






2 - Try – Catch Kullanımı

BEGIN TRY
/*T-Sql ifadelerinizin yer aldığı blok*/
END TRY

BEGIN CATCH
/*Hata oluştuğunda çalışacak blok*/
END CATCH

3 - Try – Catch’in Çalışma Mantığı
Try bloğunda herhangi bir satırda hata oluştuğunda otomatik olarak Catch bloğuna düşer ve oradaki işlemleri yapar. Try bloğunda herhangi bir hata oluşmadan tamamlanırsa Catch bloğu asla çalışmayacaktır.

4 - Hata Fonksiyonları
Catch bloğunda aşağıda listesi bulunan fonksiyonlar sayesinde hatayla ilgili detaylı bilgilere erişebilir hatta bu sonuçlara göre farklı işlemler yapabilirsiniz.

ERROR_LINE() => Hatanın olduğu satır numarasıdır.

ERROR_MESSAGE() => Hata mesajının tam halidir.

ERROR_PROCEDURE() => Hatanın oluştuğu yordamdır.

ERROR_NUMBER() => Hata numarasıdır. 

ERROR_SEVERITY() => Hatanın kritiklik seviyesidir.

ERROR_STATE() => Hatanın durum numarasıdır.

Trafik Quiz - Yeni bir iphone uygulaması daha...

Merhaba arkadaşlar, actionoid ekibi olarak apple store'da yeni bir uygulama daha yayınladık. Uygulamayla ilgili görüş ve önerilerinizi bekliyorum, teşekkürler.

https://itunes.apple.com/tr/app/trafik-quiz/id629476323?l=tr&mt=8
Trafik Quiz


10 Nisan 2013 Çarşamba

Veritabanı için normalizasyon örneği

Merhaba arkadaşlar, aşağıda veritabanı derslerimde normalizasyon anlatırken hazırladığım bir örneği inceleyebilirsiniz.

Normalizasyon
Normalizasyon










Normalizasyon tablodaki verilerin anlamlı varlıklar şeklinde ayrıştırılmasıdır. Burada amaç "veri tekrarını önlemek" ve "veri tutarlılığını" sağlamaktır. Anlamlı varlıklar şeklinde ayrıştırılmış olan tablolar arasında ilişkiler kurularak verilerin birbirleriyle ilişkilendirilmesi sağlanır.

9 Nisan 2013 Salı

Ajax request için forms authentication zaman aşımı(timeout) kontrolü

Merhaba arkadaşlar, öncelikle bu yazının nedenini yazalım. Asp.NET MVC ile bir uygulama geliştiriyorsunuz ve forms authentication kullanıyorsunuz. Bu uygulamanız içesinde birden fazla yerde ve birden farklı yöntemlerle ajax metotlarını kullanıyor olabilirsiniz. Forms authentication ve session timeout sonrasında çağıracağınız bir ajax metodu uygulamanızda hataya sebep olacaktır. Timeout sonrasında login sayfasına yönlendirme işlemini yapmak için aşağıdaki örneği kullanabilirsiniz.

Adım 1: Sayfanızda veya layout dosyasınızda aşağıdaki jquery fonksiyonunu eklemeniz gerekiyor.










ajaxComplete metodu adından da anlaşılacağı gibi tüm ajax methotlarının tamamlanmasından sonra çağrılan metottur. Gördüğünüz gibi ajax metodunun tamamlanmasından sonra http status kontrol ediliyor eğer bu kod 401(Unauthorized) ise sayfayı loginURL'e yönlendiriyoruz.

Adım 2: Yukarıdaki işlem yeterli gibi görünse de önemli bir problem var. Yukarıda tanımladığımız xhr.status 401 olması için request'i handle etmeniz gerekecektir. Bir örnekle bu problemi anlatalım. Örneğin tanımladığınız bir ajax metodu var ve sonucunda JSON değer dönüyor. Fakat bu metodu çağırdığınızda forms authentication zaman aşımına uğramış ise siz JSON beklerken sayfa size login url'deki sayfa içeriğini getirir ve normal bir sayfa içeriği yüklediği için status 200 olacaktır. Bu sorunu aşmak için de global.asax dosyasında request'in sonlandığı yerde response'u değiştiriyoruz.





4 Nisan 2013 Perşembe

C#'a giriş niteliğinde sunumlar


C# - Sürükle Bırak (Drag and Drop)

Sunum Linki: http://goo.gl/cHIxf
Konu Başlıkları
Drag and Drop  Nedir?
Drag and Drop Olayları
Drag and Drop Uygulaması



C# - Metodlar/Fonksiyonlar


Sunum Linki: http://goo.gl/AVkdy
Konu Başlıkları
Metod Nedir?
Sıkça Kullandığımız Metodlar
Metod Tanımlaması
Metodların Kullanılması
Metodların Aşırı Yüklenmesi (Overload)
Değişken Sayıda Parametreli Metodlar




C# - Hata Yönetimi

Sunum Linki: http://goo.gl/7lxnL
Konu Başlıkları
Hata türleri nelerdir?
Try-Catch-Finaly







C# - Dinamik kontrol oluşturma ve String Metotları

Sunum Linki: http://goo.gl/OPOLs
Konu Başlıkları
·         Dinamik Form Kontrolleri Oluşturma
·         String Metotları
o   Contains
o   Equals
o   IndexOf
o   Split
o   Substring
o   ToCharArray



C# - Toolbox - Genel Kontroller


Sunum Linki : http://goo.gl/uQXuj
C#’da ki her kontrol “Control Class”ına ait bir öğedir. 
Bu sunumun sonunda  genel kontrolleri öğrenmiş olacaksınız.










C# - Windows Formlar


Sunum Linki: http://goo.gl/NYmYP
Konu Başlıkları
Windows Form Uygulama Türleri
   1.MultipleDocumentInterface(MDI)
        - MultipleDocumentInterface(MDI) Nedir?
        - MDI ParentForm Oluşturmak
        - MDI ChildForm Oluşturmak
        - ChildFormun ParentFormla İlişkilendirilmesi
   2.SingleDocumentInterface(SDI)
        - SingleDocumentInterface(SDI) Nedir?
        - SDI Örnekleri




C# - Değişkenlerin faaliyet alanları ve Sabitler


Sunum Linki: http://goo.gl/gp1HH
Konu Başlıkları
- Değişkenlerin faaliyet alanları (Scope)
- Sabitler (Const)






C# - Değişkenler ve Veri Tipleri


Sunum Linki: http://goo.gl/oR7ct
Konu Başlıkları
- Değişken nedir?
- Değişken tanımlaması nasıl yapılır?
- Değişkenlere değer atama
- Veri tipleri nelerdir?






Algoritma ve Akış Şemaları


Sunum Linki: http://goo.gl/kOz1g
Konu Başlıkları
- Algoritma Nedir?
- Algoritmalar
- Soru Çözme Adımları
- Akış Diyagramı





Asp.Net Güvenlik Resmi Doğrulaması (Captcha)

Yine eskilerden :), ders videolarımdan birisi daha "Asp.Net Güvenlik Resmi Doğrulaması (Captcha)". 

3 Nisan 2013 Çarşamba

Non printable unicode karakter sorunu

Non printable unicode karakterlerden kurtulmanın yolu;

var re = /[\0-\x1F\x7F-\x9F\xAD\u0378\u0379\u037F-\u0383\u038B\u038D\u03A2\u0528-\u0530\u0557\u0558\u0560\u0588\u058B-\u058E\u0590\u05C8-\u05CF\u05EB-\u05EF\u05F5-\u0605\u061C\u061D\u06DD\u070E\u070F\u074B\u074C\u07B2-\u07BF\u07FB-\u07FF\u082E\u082F\u083F\u085C\u085D\u085F-\u089F\u08A1\u08AD-\u08E3\u08FF\u0978\u0980\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09FC-\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A76-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF2-\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B55\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B78-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BFB-\u0C00\u0C04\u0C0D\u0C11\u0C29\u0C34\u0C3A-\u0C3C\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5A-\u0C5F\u0C64\u0C65\u0C70-\u0C77\u0C80\u0C81\u0C84\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDD\u0CDF\u0CE4\u0CE5\u0CF0\u0CF3-\u0D01\u0D04\u0D0D\u0D11\u0D3B\u0D3C\u0D45\u0D49\u0D4F-\u0D56\u0D58-\u0D5F\u0D64\u0D65\u0D76-\u0D78\u0D80\u0D81\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DF1\u0DF5-\u0E00\u0E3B-\u0E3E\u0E5C-\u0E80\u0E83\u0E85\u0E86\u0E89\u0E8B\u0E8C\u0E8E-\u0E93\u0E98\u0EA0\u0EA4\u0EA6\u0EA8\u0EA9\u0EAC\u0EBA\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F48\u0F6D-\u0F70\u0F98\u0FBD\u0FCD\u0FDB-\u0FFF\u10C6\u10C8-\u10CC\u10CE\u10CF\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u137D-\u137F\u139A-\u139F\u13F5-\u13FF\u169D-\u169F\u16F1-\u16FF\u170D\u1715-\u171F\u1737-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17DE\u17DF\u17EA-\u17EF\u17FA-\u17FF\u180F\u181A-\u181F\u1878-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191D-\u191F\u192C-\u192F\u193C-\u193F\u1941-\u1943\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DB-\u19DD\u1A1C\u1A1D\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1A9F\u1AAE-\u1AFF\u1B4C-\u1B4F\u1B7D-\u1B7F\u1BF4-\u1BFB\u1C38-\u1C3A\u1C4A-\u1C4C\u1C80-\u1CBF\u1CC8-\u1CCF\u1CF7-\u1CFF\u1DE7-\u1DFB\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FC5\u1FD4\u1FD5\u1FDC\u1FF0\u1FF1\u1FF5\u1FFF\u200B-\u200F\u202A-\u202E\u2060-\u206F\u2072\u2073\u208F\u209D-\u209F\u20BB-\u20CF\u20F1-\u20FF\u218A-\u218F\u23F4-\u23FF\u2427-\u243F\u244B-\u245F\u2700\u2B4D-\u2B4F\u2B5A-\u2BFF\u2C2F\u2C5F\u2CF4-\u2CF8\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D71-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E3C-\u2E7F\u2E9A\u2EF4-\u2EFF\u2FD6-\u2FEF\u2FFC-\u2FFF\u3040\u3097\u3098\u3100-\u3104\u312E-\u3130\u318F\u31BB-\u31BF\u31E4-\u31EF\u321F\u32FF\u4DB6-\u4DBF\u9FCD-\u9FFF\uA48D-\uA48F\uA4C7-\uA4CF\uA62C-\uA63F\uA698-\uA69E\uA6F8-\uA6FF\uA78F\uA794-\uA79F\uA7AB-\uA7F7\uA82C-\uA82F\uA83A-\uA83F\uA878-\uA87F\uA8C5-\uA8CD\uA8DA-\uA8DF\uA8FC-\uA8FF\uA954-\uA95E\uA97D-\uA97F\uA9CE\uA9DA-\uA9DD\uA9E0-\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A\uAA5B\uAA7C-\uAA7F\uAAC3-\uAADA\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F-\uABBF\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBC2-\uFBD2\uFD40-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFE\uFDFF\uFE1A-\uFE1F\uFE27-\uFE2F\uFE53\uFE67\uFE6C-\uFE6F\uFE75\uFEFD-\uFF00\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFDF\uFFE7\uFFEF-\uFFFB\uFFFE\uFFFF]/g;

var editorContent = editorContent.replace(re,"");

Asp.NET MVC - HttpStatusCodeResult

Asp.NET MVC uygulamasında kullanıcı tarafından yapılan bir isteğin cevabı olarak döneceğiniz ActionResult, bazı durumlarda istediğiniz bir hata kodu ile sayfanın sonlandırılması olabilir.

Örneğin veritabanında kayıtlı olan sayfaların kullanıcılara gösterilmesini isterken olmayan bir sayfa çağrıldığında sayfanın 404 hata kodu ile bitirilmesini isteyebilirsiniz. Böyle bir sonuç dönebilmek için HttpStatusCodeResult nesnesini kullanabilirsiniz.

Aşağıdaki örnekte görüleceği gibi eğer pageURL veritabanında yoksa, kayıtlı bir hata sayfası(ErrorPage) var mı diye kontrol ediyor, eğer bu da mevcut değil ise HTTP Response 404 koduyla bitiriliyor.


public ActionResult LoadPage(string pageURL)
{
  PageDTO page = PageBusiness.GetByURL(pageURL);
  if (page == null)
  {
    page = PageBusiness.GetByURL("ErrorPage");
    if (page != null)
    {
       return Redirect("~/ErrorPage");    
    }
    else
    {
       return new HttpStatusCodeResult(404, "Page Not Found");
    }
  }
  return View(String.Format("~/getDBPage/{0}.cshtml", pageURL));
}





2 Nisan 2013 Salı

1 Nisan 2013 Pazartesi

CKEditor html içeriği için özel css atama

Bu aralar CKEditor başkıma bela olduğu için genel de bununla ilgili gördüğüm püf noktaları yazıyorum :). Bu yazıda CKEditor içeriği için bir veya daha fazla css dosyası nasıl kullanacağınızı örneklendiricem. Yapmak istediğimizi hızlıca ifade etmesi için aşağıdaki resme bakabilirsiniz.



Siz değiştirmediğiniz sürece CKEditor html'e ait varsayılan css dosyası 'ckeditor/content.css' dosyasıdır. Fakat resme dikkat ederseniz CKEditor için 'Content/reset.css' ve 'Content/websiteContent.css' dosyaları kullanılması sağlanmıştır.

Öncelikle tek bir css dosyası atama işlemini gösterelim. CKEditor klasörünüzde bulunan config.js dosyasını açarsanız aşağıdaki gibi bir kod bloku göreceksiniz. İşaretlediğim satırı bu dosyanıza eklerseniz varsayılan css dosyasını değiştirecektir.

CKEDITOR.editorConfig = function (config) {
    // Define changes to default configuration here. For example:
    // config.language = 'fr';
    // config.uiColor = '#AADC6E';

      config.contentsCss = 'Content/websiteContent.css';
};
Eğer birden fazla css dosyası kullanmak istiyorsanız contentCss özelliğine atamak için bir dizi tanımlamanız gerekmektedir.

CKEDITOR.editorConfig = function (config) {
     var cssArray = new Array(2);
     cssArray[0] = 'Content/reset.css';
     cssArray[1] = 'Content/websiteContent.css';
     config.contentsCss = cssArray;
};
Tabi bu yapacaklarınız sabit bir tanımlama şeklidir. Şöyle ki programatik olarak farklı durumlara göre contentCss için farklı stil dosyaları yüklemek istiyorsanız aşağıdaki örneği kullanabilirsiniz.

function changeCKEditorContentCSS(contentCssURL)
{
     var cssArray = new Array(2);
     cssArray[0] = 'Content/reset.css';
     cssArray[1] = contentCssURL;
     editor.config.contentsCss = cssArray;
//Opsiyonel isterseniz en başta tanımladığım gibi tek bir css dosyası da tanımlayabilirsiniz.
}
Not: CKEditor için editor nesnesini nasıl oluşturduğumu görmek için ckeditor ile ilgili bir önceki yazımı inceleyebilirsiniz;
http://turkceyazilim.blogspot.com/2013/03/ckeditorde-imlecin-oldugu-yere-yeni-bir.html