Makale Özeti

Asp.net, Windows Forms gibi etkiye anında tepki veren bir yapı değil. Uzun süren bir işlem sırasında kullanıcının butonumuza bir kere tıklamasını sağlamak Windows Forms ile basit fakat asp.net ile bunu yapmanın tek yolu javascript kullanmak. (Bu sadece uzun süren bir işlem değil, üye kayıt formu bile olabilir) .Bu sorunu ortadan kaldırmak için ise bir kere tıklamaya izin verilmiş button kullanmak en iyi çözüm.Bu makalede öyle bir örnek yapacağız ki hem button’umuza tıklayınca anında tepki verecek hemde bu button bizim kendi yazmış olduğumuz bir control olacak.

Makale

Asp.net ve Tek Tıklamalık Button

 

Asp.net Windows Forms gibi etkiye anında tepki veren bir yapı değil. Uzun süren bir işlem sırasında kullanıcının butonumuza bir kere tıklamasını sağlamak Windows Forms ile basit fakat asp.net ile bunu yapmanın tek yolu javascript kullanmak. (Bu sadece uzun süren bir işlem değil üye kayıt formu bile olabilir) .Bu sorunu ortadan kaldırmak için ise bir kere tıklamaya izin verilmiş button kullanmak en iyi çözüm.Bu makalede öyle bir örnek yapacağız ki hem button’umuza tıklayınca anında tepki verecek hemde bu button bizim kendi yazmış olduğumuz bir control olacak. Nasıl mı ? İşte başlıyoruz :

Yapmamız gereken ilk şey yeni bir Class Library Project oluşturmak. Oluşturduğumuz projeye referans olarak System.Web dll’ini ekliyoruz ve kodumuzu yazmaya başlıyoruz:

using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using System.Web;

namespace TekTikButton
{
    //
    public class TekTik : System.Web.UI.WebControls.Button
    {
 

        // Button'a tiklaninca gosterilecek olan metin(default deger)
        private string waitText = "Bekleyin...";

        // Siraya Text'in default degerini, properties tab'inda gorunecek aciklama ve
        // Hangi grupta bu Text'e ayarlama yapacagimizi belirliyoruz.

        [DefaultValue("Bekleyin...")]
        [Description("Properties Tab'ından gorunecek aciklamamiz.")]
        [Category("Appearance")]
        public string WaitText
        {
            get
            {
                return this.waitText;
            }
                set
            {
                this.waitText = value;
            }
        }

        // Bizim button'umuza disable ozelligini ve javascript kodumuza yazalim
        protected override void OnPreRender(EventArgs e)
        {
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            sb.Append("if (typeof(Page_ClientValidate) == 'function') { ");
            sb.Append("if (Page_ClientValidate() == false) { return false; }} ");
            sb.AppendFormat("this.value = '{0}';", this.waitText);
            sb.Append("this.disabled = true;");
            sb.Append(this.Page.GetPostBackEventReference(this));
            sb.Append(";");
            this.Attributes["onclick"] = sb.ToString();

            base.OnPreRender(e);
        }
    }
}


Kodumuzu yazdıktan sonra projeyi build edelim. Artık TekTikButton.dll dll’imizi referans olarak kullanabiliriz. Bunun için basit bir örnek yapalım. Dll’imizi Toolbox’ımıza ekleyelim:

 

Daha sonra Control'ümüz  Toolbox'ta görünecektir.

Sürükle bırak yöntemi ile controlümüzü sayfamıza ekliyoruz.

Control'ümüz standart bir button eksiği yok fazlası var o da tıklama işleminden sonra text değişmesi ve beklemesi. Değişecek olan text ise properties tab'ında bizi bekliyor.

Sıra geldi test etmeye. Control'ümüzü test etmeden önce örneğin daha iyi anlaşılması açısından button'umuzu 5 saniye bekletelim.

protected void TekTik1_Click(object sender, EventArgs e)
{
    DateTime start = DateTime.Now;
    System.Threading.Thread.Sleep(5000);
    Response.Write(string.Format("Butonumuz tam olarak {0} saniye disabled durumunda kaldi.", ((TimeSpan)DateTime.Now.Subtract(start)).TotalSeconds));

}
 

İşte Sonuç :

Hepinize İyi Çalışmalar.

Okan Tekeli

tekeli_okan@yahoo.com

Örnek dosyalar