Özel kontrol oluşturmak (Custom Control)

Özel kontrol oluşturmak (Custom Control)

Özel kontroller (Custom Control) özgün assembliler olarak konuşlandırılırlar. Diğer ASP.Net server kontrolleri gibi kullanılırlar ve dinamik link kütüphanesi içinde (DLL) derlenirler.

Aşağıdaki seçeneklerden biri kullanılarak oluşturulabilir :

  • Dışarıdan bir özel kontrol türeterek
  • İki veya daha fazla harici kontrolü birleştirip yeni bir özel kontrol oluşturularak
  • Ana yada temel kontrol sınıfından türetilerek

Bu yapıyı yada bu kavramı tanımak için tarayıcıda basit bir mesaj gösteren özel bir kontrol oluşturalım. Aşağıdaki adımları takip ediyoruz :

Yeni bir web site yaratalım. Solution’a sağ tıklayalım. Yanlışlıkla projeye tıklamamaya dikkat edin. Aşağıdaki pencerede göründüğü gibi bir server control oluşturuyoruz.

CustomControl

Yukarıdaki adım ServerControl1 adında çağrılan eksiksiz bir özel kontrol oluşturur ve bunu solution  içerisine ekler. Bu örneğimizde bu kontrolümüzü CustomContorls olarak isimlendiriyoruz. Bu kontrolü kullanmak için önceden referans etmeliyiz. Bu işlemi gerçekleştirmek için var olan projemiz üzerine sağ tıklayarak Add Reference seçeniğini tıklıyoruz. Açılan pencereden Solution altında Projects içerisinde yer alan projemizi seçerek ekliyoruz. Eğer proje görünmüyorsa solution’a sağ tıklarayarak build ediniz.

CustomControl1

Toolbox içerisinde her hangi bir tagda Choose Items diyerek kontrolümüzü getirebiliriz. Sürükle bırak yöntemiyle istediğimiz sayfaya ekleyebiliriz.

<%@ Page Language=”C#” AutoEventWireup=”true” CodeFile=”Sil.aspx.cs” Inherits=”UserControls_Sil” %>

<%@ Register Assembly=”ServerControl1″ Namespace=”ServerControl1″ TagPrefix=”cc1″ %>
<!DOCTYPE html>

<html xmlns=”http://www.w3.org/1999/xhtml”>
<head runat=”server”>
<title></title>
</head>
<body>

<form id=”form1″ runat=”server”>
<cc1:ServerControl1 ID=”ServerControl1″ text=”Server Control’den merhaba :)” runat=”server” />
</form>
</body>
</html>

Sayfa çalıştığında yazdığımız text içeriği görüntülenecektir.

Bu örneğimizde text özelliği set ediliyor. ASP.Net bu özelliği default olarak kontrol yaratıldığında oluşturuyor. Code behinde dosyasının bunu meydana getiriyor.

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Linq;

using System.Text;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

 

namespace CustomControls

{

   [DefaultProperty(“Text”)]

   [ToolboxData(“<{0}:ServerControl1

                  runat=server></{0}:ServerControl1>”)]

    public class ServerControl1 : WebControl

   {

      [Bindable(true)]

      [Category(“Appearance”)]

      [DefaultValue(“”)]

      [Localizable(true)]

      public string Text

      {

         get

         {

            String s = (String)ViewState[“Text”];

            return ((s == null) ? “[” + this.ID + “]” : s);

         }

         set

         {

            ViewState[“Text”] = value;

         }

      }

      protected override void RenderContents(

                                        HtmlTextWriter output)

      {

         output.Write(Text);

      }

   }

}

Yukarıdaki kodlar otomatik olarak bir custom kontrol oluşturdu. Olaylar ve metodlar custom contol sınıfına eklendi.

Şimdi örneğimizi biraz daha genişletelim ve bir örnek yapalım.

Palindromları kontol eden “checkpanlindrome” adlı bir metod oluşturuyoruz.

Palindrom; baştan ve sondan okunduğunda değeri değişmeyen kelime veya sabitlerdir. Bu örnek için basit kelimeleri ele alacağız.

Custom Control kodlarımızı aşağıdaki şekilde gibi genişletiyoruz :

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Linq;

using System.Text;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

 

namespace CustomControls

{

   [DefaultProperty(“Text”)]

   [ToolboxData(“<{0}:ServerControl1

               runat=server></{0}:ServerControl1>”)]

   public class ServerControl1 : WebControl

   {

      [Bindable(true)]

      [Category(“Appearance”)]

      [DefaultValue(“”)]

      [Localizable(true)]

      public string Text

      {

         get

         {

            String s = (String)ViewState[“Text”];

            return ((s == null) ? “[” + this.ID + “]” : s);

         }

         set

         {

            ViewState[“Text”] = value;

         }

     }

     protected override void RenderContents(

                                       HtmlTextWriter output)

     {

        if (this.checkpanlindrome())

        {

           output.Write(“Bu bir palindromdur: <br />”);

           output.Write(“<FONT size=5 color=Blue>”);

           output.Write(“<B>”);

           output.Write(Text);

           output.Write(“</B>”);

           output.Write(“</FONT>”);

        }

        else

       {

          output.Write(“This is not a palindrome: <br />”);

          output.Write(“<FONT size=5 color=red>”);

          output.Write(“<B>”);

          output.Write(Text);

          output.Write(“</B>”);

          output.Write(“</FONT>”);

       }

    }

    protected bool checkpanlindrome()

    {

       if (this.Text != null)

       {

          String str = this.Text;

          String strtoupper = Text.ToUpper();

          char[] rev = strtoupper.ToCharArray();

          Array.Reverse(rev);

          String strrev = new String(rev);

          if (strtoupper == strrev)

          {

             return true;

          }

          else{

             return false;

          }

       }

       else

       {

          return false;

       }

    }

  }

}


Kodları değiştirdiğinize projenizi build etmeyi unutmayınız. Bu işlem değişiklikleri projenize yansıtacaktır. Sayfamıza bir adet textbox ve buton ekliyoruz, butona tıklandığında bir text üreteceğiz.

<form id=”form1″ runat=”server”>

<div>

   Enter a word:

   <br />

   <asp:TextBox ID=”TextBox1″ runat=”server” style=”width:198px”>

   </asp:TextBox>

   <br />

   <br />

   <asp:Button ID=”Button1″ runat=”server”

               onclick=”Button1_Click”

               Text=”Check Palindrome” style=”width:132px” />

   <br />

   <br />

   <ccs:ServerControl1 ID=”ServerControl11″

               runat=”server” Text = “” />

</div>

</form>

Code behind :

protected void Button1_Click(object sender, EventArgs e)

{

     this.ServerControl11.Text = this.TextBox1.Text;

}

Ekran çıktısı  :CustomControl2

Kolay Gelsin.

Kaynak : http://www.tutorialspoint.com/asp.net/asp.net_custom_controls.htm

ASP.NET ile Jquery autocomplete yapmak (1)

ASP.NET ile Jquery autocomplete yapmak (1)

Bir önceki makalemde asp.net ile autocomplete kullanımını işlemiştim. Dileyen Ajax AutoComplete Extender ile gelişmiş arama linkinden ilgili makaleyi inceleyebilir. Yine aynı konunun devamı olan bir makale daha yazıyorum. Ancak bu sefer Jquery kullanarak ve daha gelişmiş bir arama motoru yapacağız. Daha önce bu işlemi Ajax AutoComplete Extender ile yapmışken şimdi neden tekrar yaptığımı merak edebilirsiniz. Birinci sebebi bu modül daha gelişmiş olacak. Bir web servis kullanacağız. (daha&helliip;)

Ajax AutoComplete Extender ile gelişmiş arama

Ajax AutoComplete Extender ile gelişmiş arama

ASP.NET AJAX AutoComplete extender herhangi bir TextBox kontrolüne bağlanabilir ve bundan sonra  textbox’a yazılan yazı ile başlayan kelimeyle ile ilişkilendirilecek ve pop up panelde bu ilişkili kelimeler gözükecektir.

Dropdown içerisinde web servis tarafından sağlanan aday kelimeler textbox içine yerleştirilecektir. (daha&helliip;)

Orantılı resim küçültme

Orantılı resim küçültme

Sitemize resim yada fotoğraf ekleyeceğimiz zaman boyutlarıyla oynamak isteriz. İçerisine ilan girilen bir sitemiz olduğunu varsayalım. Bu durumda kullanıcılar cep telefonu ve fotoğraf makinelerinden çektikleri fotoğrafları olduğu gibi siteye yüklemek isteyecektir. Bu fotoğrafları orjinal halleriyle sitemize yüklememizin intihardan farkı yok. Dolayısıyla bunların boyutlarını ve ölçeklerini küçültüp sitemize uygun hale getirmemiz gerekiyor. (daha&helliip;)

HttpHandlers (ASHX dosyası) içinde Session getirmek

ASHX yada HttpHandler dosyasından Session çağırmak istediğiniz zaman  IReadOnlySessionState uygulamanız gerekiyor.

<% @ webhandler language=”C#” class=”DownloadHandler” %>

using System;
using System.Web;
using System.Web.SessionState;

public class DownloadHandler : IHttpHandler, IReadOnlySessionState
{
public bool IsReusable { get { return true; } }

public void ProcessRequest(HttpContext ctx)
{
ctx.Response.Write(ctx.Session[“Abdulhamit”]);
}
}

Kaynak : http://www.hanselman.com/blog/GettingSessionStateInHttpHandlersASHXFiles.aspx

Asp.NET Twitter Login

Asp.NET Twitter Login

Bu makalede ASP.Net ile Twitter ile login nasıl olunuru göreceğiz. Ücretsiz ASPSnippets Twitter API ve Twitter OAUTH APIlerini kullarak  Twitter hesap detayları, profil bilgileri, resim, ekran ismi, Twitter Id, ad, açıklama, arkadaş sayısı ve takipçi sayısı verilerini çekeceğiz. (daha&helliip;)

Html form button elemanını code-behind sayfasında çağırmak

Html form button elemanını code behind sayfasında çağırmak

Aklınıza <asp:button> elemanı varken bunu neden yapayım diye bir soru gelebilir. Ancak durum hiçte göründüğü gibi değil bir örnek vermek gerekirse. Diyelim ki bir formunuz var ve bu formdaki alanların kontrolünü veya doğrulamasını Html5 validation özelliklerini kullanarak yaptınız. Fakat sayfanıza iki veya daha fazla butonlarınız var. Birinci buton formu post etsede ikinci buton farklı bir işlev yapıyor olacak.  İkinci butona tıkladığınızda sizden validation kontrollerini doğrulamanız istenecek fakat siz bu butonlar başka bir olay yapıyordunuz. İlk çözüm butona formnovalidation eklemek olacaktır. Bu sayede bu buton bağımsız olarak çağrılmış olacak. Sayfayı chrome ve firefox’ta açtınız. Herşey yolunda fakat bir de IE’de açın. O da ne ? Çalışmıyor mu ? Merak etmeyin bununda çözümü var. İsterseniz çözümü bu http://msdn.microsoft.com/en-us/library/ie/hh772935(v=vs.85).aspx bağlatıdan detaylı olarak inceleyebilirsiniz. IE ‘de <asp:button> elamanına verilen bu özellik desteklenmiyor. Html form elemanı olan bir elemana verildiğinde ise tıkır tıkır çalışıyor. Önce html butonumuza formnovalidate özeliği atıyoruz daha sonra onclick=”__doPostBack(‘btnSubmit’, ‘Giris’);” özelliğini atıyoruzki post olduğunda code behinde sayfasından çağrılabilsin.

Code behind sayfamızda reques form diyerek butonumuzu çağırdıktan sonra çalışmasını istediğimiz metod veya fonksiyonu çağırıyoruz.

Hmtl :

<input id=”Submit1″ type=”submit” value=”submit” formnovalidate name=”save” runat=”server” onclick=”__doPostBack(‘btnSubmit’, ‘Giris’);”/>

Code behind :

protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
if (Convert.ToString(Request.Form[“__EVENTARGUMENT”]) == “Giris”)
{
Face_log();//submit action here
}
}
}

public void Face_log()
{
Response.Redirect(“defaul.aspx”);
}

Kolay gelsin

Sorular Cevaplar (1)

Sorular Cevaplar (1)

ResolveUrl – ResolveClientUrl farkı nedir ?

ResolveUrl root’a bağlı url yaratır. ResolveClientUrl ise bulunulan sayfaya bağlı url yaratır.

@font-face ie’de neden çalışmaz ?

Projenizde yer alan fontun uzantısı .otf değilse ie’de çalışmayacaktır.

Html5 novalidate ie’de çalışmıyor

W3scholls yazdığına göre novalidate ie 10 tarafından destekleniyormuş. IE 11 yani son ie’nin son versiyonunda bile hala desteklenmiyor. Aşağıdaki kullanım işinizi görecektir.

<input type="submit" formnovalidate name="save"  />

Bu http://msdn.microsoft.com/en-us/library/ie/hh772935(v=vs.85).aspx bağlantıdan detaylı bilgi edinebilirsiniz.

Ayrıca konuyla ilgili http://abdulhamiterdogan.wordpress.com/2014/10/14/html-form-button-elemanini-code-behind-sayfasinda-cagirmak/ makalede işinize yarayabilir.

Css ile input button value text ‘i nasıl gizlenir ?

textindent:-9999px;

IE Facebook login olduktan sonra boş pop up döndürüyor.

IE -> Internet Options -> Security tab -> Local intranet -> (check) Enable protected mode

InterpolationMode ne demek ?

Bir resim döndürüleceği veya ölçeklendirileceği zaman kullanılan algoritmayı belirleyen numarlandırmadır.

HighQualityBicubic ne demek ?

Bu mod resimleri yüksek kalitede dönüştürür.

Javascript ile önceki sayfaya nasıl dönerim ? 

<script>
     function goBack() {
      window.history.back()
}
</script>

Javascript request url değeri nasıl alınır ? 

var data = ‘<%=this.Request.QueryString[“deger”]%>’;

Master Page’de yer alan User Control nasıl gizlenir ? 

 ((UserControl)this.Master.FindControl(“AutoComplete1”)).Visible = false;

ASP.Net’de belirli bir session nasıl kapatılır ?

Session.Remove(“SessionDegeri”) yada Session[“SessionDegeri”] = null;

fckEditor’de araç çubuğunu kapatıp açan butonu nasıl kaldırabilirim ?

fckconfig.js > FCKConfig.ToolbarCanCollapse = false ;

fckEditor kopyalama ve yapıştırma (Copy-Paste) nasıl engellenir ? 

fckconfig.js :

FCKConfig.Keystrokes = [

  [ CTRL + 67 /C/, false ],

  [CTRL + 86 /V/, false],

] ;

Bir javascript içerisindeki object sayısı nasıl hesaplanır ?

Object.keys(myObject).length

Javascript içerisinde bir değişkenin tanımlı olup olmadığı (defined/undefined) nasıl kontrol edilir.

if(typeof degisken === “defined”) / if(typeof degisken === “undefined”)

Textbox filtreleme (mask) nasıl yapılır ?

<input type="text" name="field-name" data-mask="00/00/0000" />

data-mask içerisindeki karakter ve sayıları değiştirerek size lazım olan türe göre maskeleyebilirsiniz.

Javascript bind ne yapar ?

bind() bir yada daha fazla olay tutucuyu (event handler) seçilen elemana bağlayarak, olay (event) meydana geldiğinde fonksiyonun çalışmasını sağlar.

JQuery 1.7 versiyondan sonra on() metodu bu metodun yerine tercih edilmiştir.