28 Ekim 2009 Çarşamba

RegisterForEventValidation can only be called during Render(); Hatası

Merhaba arkadaslar,

Bu yazımda asp.net de karşılaşabileceğiniz bir hatadan ve çözümünden bahsetmeye çalışacağım.

Hatamızın adı :
RegisterForEventValidation can only be called during Render();

ya da
RegisterForEventValidation ancak Render() sırasında çağrılabilir ;

Yukarıdaki gibi bir hata alıyorsanız muhtemelen excel e export ya da word e bişeyler export etmeye çalışıyorsunuz. Ya da kodunuzun içinde RenderControl kullanıyorsunuz. Şimde gelelim bu hatadan nasıl kurtulabiliriz.

Bu hatadan kurtulmanın ve kodumuzun sağlıklı bir şekilde çalışmasına devam etmesi için sayfanızın .aspx tarafında küçük bir ekleme yapmamız yeterli olacaktır.

Language="C#" ifadesinin olduğu satıra EnableEventValidation="false" yazmanız yeterli olacaktır. EnableEventValidation="false" yazdıktan sonra yeniden build edin ve kodunuzun istediğiniz gibi çalışıyor olmasının tadını çıkarın. :)

Evet bir yazının daha sonuna geldik.

Faydalı olması dileği ile.

15 yorum:

  1. hocam uzun süredir yaşadığım sorunu bu iki kelimeyle çözdüm.eline sağlık.Bahadır Akgün

    YanıtlaSil
  2. Merhaba,

    Faydalı olmasina sevindim.

    Kolay gelsin. Iyi Calismalar.

    YanıtlaSil
  3. merhaba bir div içerisine table ve birde datalist koyup daha sonra bu div e runat="server" deyip RenderControl yapamazmıyım? yani div içerindeki herşeyi excele göndermek istiyorum. Yardım edermisiniz??

    YanıtlaSil
  4. Merhaba,
    Bu mumkun. İsini gorecek olan fonksiyonu yazdim. Asagida bulabilirsin.

    Dikkat etmen gereken yer div'e runat="server" ozelligini eklemelisin. Ayrica Fonksiyonun calisabilmesi icin asagidaki referanslari da eklemen gerekmekte.

    Eklenecek olan Referanslar:
    ----------------------------
    using Microsoft.Office.Core;
    using System.IO;
    using System.Diagnostics;
    using System.Text;

    Fonksiyon:
    -----------------
    public void ExportDivToExcel(string filename, HtmlControl DivName)
    {
    string attachment = "attachment; filename=" + filename + ".xls";
    HttpContext.Current.Response.ClearContent();
    HttpContext.Current.Response.ContentEncoding = Encoding.UTF8;
    HttpContext.Current.Response.AddHeader("content-disposition", attachment);
    HttpContext.Current.Response.ContentType = "application/ms-excel";

    StringWriter sw = new StringWriter();
    HtmlTextWriter htw = new HtmlTextWriter(sw);
    DivName.RenderControl(htw);

    HttpContext.Current.Response.Write(HttpUtility.HtmlDecode(sw.ToString()));
    HttpContext.Current.Response.End();
    }


    Kolay gelsin.

    Iyi calismalar.

    YanıtlaSil
  5. çok yardımcı oldu, emeğinize sağlık

    YanıtlaSil
  6. Faydali olmasina sevindim.

    YanıtlaSil
  7. Çok tşekkürler.

    YanıtlaSil
  8. Abi çok sağolun

    YanıtlaSil
  9. Çok teşekkürler.Çok Faydalı oldu.

    YanıtlaSil
  10. TEŞEKKÜRLER

    YanıtlaSil
  11. Teşekkürler fayda sağladım :) Emeğine sağlık

    YanıtlaSil
  12. Emeğine sağlık reis sorun çözüldü:)

    YanıtlaSil