asp.net mvc etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
asp.net mvc etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

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 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

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.





3 Nisan 2013 Çarşamba

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));
}





29 Mart 2013 Cuma

CKEditor'e html içerik ekleme



Merhaba arkadaşlar bu yazı veritabanından almış olduğunuz html içeriği tırnak işaretleri, boşluklar, html etiketleri vs. gibi javascript hatalarına sebep olabilecek şeyler kurtararak ckeditor'e nasıl ekleneceğini gösteren bir örnektir.
Ben bir Asp.NET MVC uygulamasında bu örneği kullanmıştım. Tabi ufak bir iki değişiklikle normal asp.net projelerinde de kullanabilirsiniz.

** Öncelikle Controller'da veritabanından html içeriği getirecek metodu tanımlıyoruz. Bu görüldüğü gibi geri dönüş değeri olarak Json nesnesi dönüyor.

public ActionResult GetPageContent(PageViewModel pageViewModel)
{
      pageViewModel.PageDTO = PageBusiness.GetByGUID(pageViewModel.PageDTO.GUID);
      return Json(new { content = pageViewModel.PageContentAsText });
}

** JQuery ajax ile de bu metodu çağırıp dönen sonucu ckeditor'e ekliyoruz. 

function SetCKEditorContent(pageGUID)
{
      data = {};
      data["PageDTO.GUID"] = pageGUID;
      $.ajax({
              url: '@Url.Action("GetPageContent")',
              type: "POST",
              processData: true,
              data: data,
              dataType: "json",
              async: true,
              success: function (data) {
                    editor.setData(data.content, function () { this.checkDirty(); });  
                    // Ajax sonucunda gelen data nesnesindeki değeri CKEditor'e atama işlemi.
                }
            });
}

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