Uğur UMUTLUOĞLU
Web Teknolojileri, Microsoft ve .NET Teknolojileri

Windows 7 ile 7 Saat

windows7_logo Tüm zamanların en iyi işletim sistemi Windows 7’nin RTM sürümünün çıkmasına çok az süre kaldı. Windows 7 ile gelen yeniliklere BT Uzmanı veya Yazılım Geliştirici gözüyle bakmak istiyorsanız 11 Temmuz 2009 Cumartesi günü Microsoft Türkiye’nin İstanbul ofisinde gerçekleşecek paralel 14 oturum sizleri bekliyor.

INETA Türkiye’nin düzenlediği bu etkinliğe katılmak için www.inetatr.org adresinden kayıt olabilirsiniz.

 

1 Temmuz 2009 Çarşamba 21:10

Organik Yazılım Günü

27 Haziran 2009 Cumartesi günü Yıldız Teknik Üniversitesi’nde açık kaynaklı uygulamalarla ilgili olarak güzel bir etkinlik gerçekleştireceğiz. Her ne kadar açık kaynak kod üreten birisi olmasam da, yoğun şekilde tüketen birisi olarak benim de anlatacaklarım var(saat 15:45-16:15 arasında, AJAX Control Toolkit sunumu). Etkinliğe kayıt için www.inetatr.org adresindeki formu doldurabilirsiniz.

organik_yazilim_gunu

16 Haziran 2009 Salı 22:20

Tarayıcı Tipine Göre Kontrollerin Özelliklerini Belirleme

Web uygulamalarında HttpBrowserCapabilities nesnesi ile(Request.Browser) istemcinin tarayıcısı ile ilgili bilgileri elde edebilmekte ve tarayıcıya bağımlı işlemlerimizi iş mantığımıza göre kodlayabilmekteyiz. Peki code-behind tarafına girmeden, HTML tarafında tarayıcı tipine göre özelleştirme yapabilir miyiz? Sorduğuma, hatta bu blog postunu yazdığıma göre cevabı evet:) Bu yazımda programatik erişime dahi gerek kalmadan, HTML kodları içerisinden dekleratif şekilde bir ASP.NET kontrolünün özelliklerini nasıl tarayıcıya göre değiştirebileceğimizi anlatacağım kısaca. Aslında oldukça enteresan bir kullanım şekli; tarayıcıya göre çeşitlilik gösterecek özelliğin başına ie:, mozilla:, safari: gibi ön ekleri ekleyerek böyle bir kullanımı gerçekleştirmek mümkün. Örneğin bir butonun Text değeri IE’de farklı FF’de farklı görüntülensin istiyorsanız ie:Text=”” mozilla:Text=”” şeklinde bir kullanım gerçekleştirmek gerekiyor. Aşağıdaki kod parçasında Internet Explorer, Mozilla Firefox, Safari ve Chrome gibi tarayıcılar için özelleştirilmiş bilgiler yer alıyor.

<asp:Label ID="lbl1" runat="server"></asp:Label><br />

<asp:Button ID="btn1" runat="server" ie:Text="IE" mozilla:Text="Mozilla"
           safari:Text="Safari veya Chrome" Text="Bilinmeyen Tarayıcı"
           ie:OnClientClick="javascript:fnIE();"  mozilla:OnClientClick="javascript:fnFF();" />


Not
: Makinemde kurulu 3 tarayıcı olduğu için sadece bunların prefix değerlerini test edebiliyorum. Bu tarayıcılar dışındaki tarayıcıların prefixlerini görmek için Debug modda iken Request.Browser.Browser özelliğinin değerine göz atabilirsiniz.

Özellikle tarayıcıdan tarayıcıya farklılaşabilen özellikler için(CssClass veya client-side event çağırımı için) kullanışlı olabilecek bir yazım yolu. Peki bu işin sunucu tarafında, yani kod kısmında yapılanı var mı diye bir soru soracak olursanız, yazımızın başında da belirttiğim gibi Request.Browser değeri üzerinden tarayıcı tipine göre işlemler yapılabilir. Aşağıdaki kod parçasında da bu kullanım görülmektedir.

protected void Page_Load(object sender, EventArgs e)

{

    string browser = Request.Browser.Browser.ToLower();

    if (browser == "ie" || browser == "ıe")

        lbl1.Text = "internet explorer";

    else if(browser == "mozilla")

        lbl1.Text = "mozilla";

    else if(browser == "firefox")

        lbl1.Text = "firefox";

    else if (browser == "applemac-safari") //Chrome içinde geçerli

        lbl1.Text = "Safari veya Chrome";

    else

        lbl1.Text = "bilinmeyen tarayıcı";

}


6 Haziran 2009 Cumartesi 01:56
Etiketler:   ,
Kategori:   ASP.NET
İşlemler:   Arkadaşına Gönder | del.icio.us | Permalink | Yorumlar (1) | Yorumlar RSSRSS comment feed

ListView’da Sayfalama İşlemini QueryString ile Gerçekleştirmek

ASP.NET 3.5 ile gelen veri kontrolü ListView oldukça esnek bir yapı sunmaktadır. GridView ile yapılabilen tüm işlemleri gerçekleştirebildiğimiz bu kontrolde GridView’a ek olarak Insert işlemlerini de yapabiliyoruz. Diğer yandan oluşacak HTML çıktıda tamamen bizim elimizde, yani istediğimiz şekilde HTML çıktıyı oluşturabiliyoruz. GridView’da bu tarz bir işlemi yapmak neredeyse imkansızdı.

ListView’ın bir diğer avantajı ise sayfalama(paging) işlemlerini QueryString üzerinden yapıyor olabilmemiz! ListView kontrolü sayfalama işlemlerini DataPager adındaki bir kontrol üzerinde yapmaktadır(DataPager’ın da ASP.NET 3.5 ile geldiğini belirtmek gerekir). Normal şekilde oluşturulan ListView kontrolü sayfalama işlemlerini DataPager içerisindeki LinkButton’lar ile yapar; yani PostBack işlemi sonucunda çağrılan JavaScript fonksiyonları sayfalamanın yapılmasına yardımcı olur. Dolayısıyla sayfanın URL’sinde herhangi bir değişiklik olmaz. Eğer sayfalama işleminin QueryString üzerinde taşınan SayfaNo gibi bir değer ile UrunListele.aspx?SayfaNo=3 şeklinde gerçekleşmesini istiyorsak yapmamız gereken tek şey DataPager kontrolünün QueryStringField özelliğine SayfaNo gibi bir değer atamak olacaktır. Yine elimiz değmişken şu özellikten de bahsedeyim; DataPager’ın PageSize özelliğinden de bir sayfada kaç kayıt görüntüleneceğini belirleyebilirsiniz. Aşağıda DataPager üzerinde yapılan değişiklikler ve örnek bir ekran çıktısı yer alıyor.

<asp:DataPager ID="DataPager1" runat="server" QueryStringField="SayfaNo" PageSize="15">

    ...

</asp:DataPager>

Kullanıcıların QueryString üzerinden istediği sayfalara gidebilmesi ve arama motoru iyileştirmesi(SEO) açısından oldukça önemli ve kullanışlı bir ipucu aslında ;)

30 Mayıs 2009 Cumartesi 11:52

URL Routing Ayarlarını Özelleştirmek

ASP.NET MVC uygulamalarında adres formatıları URL Routing adını verdiğimiz mekanizma tarafından yönetilmektedir. {controller}/{action}/{id} formatındaki URL prototipi her ihtiyacı karşılamayacağı için farklı adres formatları oluşturmak istediğimizde nasıl bir yol izlemeliyiz? Bu yazımızda farklı URL Routing ayarlarını nasıl gerçekleştirebileceğimizi inceleyeceğiz.

Varsayılan URL Routing ayarları dışında farklı URL yönlendirme tanımlamaları yapmak için yine Global.asax dosyasındaki Application_Start metodunu(dolayısıyla RegisterRoutes metodunu) güncellememiz gerekecektir. Öncelikli olarak farklı olacak URL adresimizin nasıl olacağını belirlemek lazım. Oluşan URL'in şablonuna göre RouteCollection nesnesinin MapRoute metodu aracılığıyla gerekli URL Routing formatlamasını yapmalı, hangi Controller nesnesinin, Action metodunun çağrılacağını ve bu metoda hangi parametrenin gönderileceğini belirtmek gerekecektir. Yapılan URL tanımlamasına istersek belirli kısıtlamalar da getirebiliyoruz, ama bu konuyu aksilik olmazsa bir sonraki yazımızda inceleyeceğiz. Dilerseniz basit bir URL yönlendirmesinin nasıl yapılabileceğini inceleyelim.

Adres formatımız şöyle olsun; www.umutluoglu.com/Haber/Visual-Studio-2010-Beta1-Duyuruldu. Dikkat ederseniz standart URL Routing ayarlarına göre bir değerimiz eksik, toplam iki tane değerimiz var; Haber ve haberin başlığı. Şimdi, bu URL'in arkaplanda bir controller nesnesinin action metoduna gitmesi gerekiyor. Sonuçta burada haber detayını getirecek bir metodumuzun olması yeterli. O zaman controller ve action'a isimlerini verelim; HaberController ve Oku. Diğer yandan haberin başlığını metodumuza parametre olarak göndermemiz de gerekecektir. Yani şablon olarak Haber/{baslik} şeklinde URL'lerimiz olacak. Burada haber başlığı parametrik olacağı için {baslik} şeklinde süslü parantezlerle yazılması gerekiyor. MapRoute metoduna baktığımız zaman ilk parametremiz yönlendirme ayarına verilen bir isim, ikinci parametre URL şablonu, üçüncü parametre ise varsayılan controller-action-baslik değerleri olacak. Aşağıda bu yönlendirmenin nasıl kodlanacağı görülmektedir.

Global.asax
public
class MvcApplication : System.Web.HttpApplication

{

    public static void RegisterRoutes(RouteCollection routes)

    {

        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

 

        routes.MapRoute(

            "HaberOkuma",

            "Haber/{baslik}",

            new { controller = "Haber", action = "Oku" }

        );

 

       routes.MapRoute(

            "Default",                                              // Route name

            "{controller}/{action}/{id}",                           // URL with parameters

            new { controller = "Home", action = "Index", id = ""// Parameter defaults

        );
   }
}

Görüldüğü gibi ikinci parametre URL'in formatı, üçüncü parametre ise varsayılan controller ve action değerleri oldu. URL formatında sadece {baslik} değeri var, dolayısıyla bu yönlendirmedeki controller ve action değerleri sabit, baslik ise değişen değer olacak. Controller HaberController, action metodu Oku olmalı ve de Oku metodu baslik adında bir parametre almalıdır. URL ayarlamasına açıklık getirdiğimize göre şimdi bu formattaki URL'leri karşılayacak Controller sınıfımızı oluşturalım.

ÖNEMLİ NOT: Dikkat edilirse HaberOkuYonlendirme isimli yönlendirme ayarı Default adındaki varsayılan ayarın üstünde tanımlanmış. Eğer tanımlamaların sıralaması değişirse Haber/Visual-Studio-2010-Beta1-Duyuruldu şeklindeki URL'de Haber controller, Visual-Studio-2010-Beta1-Duyuruldu ise action metodu olarak ele alınır ve bu talebe cevap verilemez(hata sayfası döndürülür). Oysaki bizim controller nesnemiz Haber ve action metodumuz Oku idi. Buradan şu sonuca varabiliriz; özel URL ayarları genellikle varsayılan URL ayarının üstünde yapılır! Ama bu her zaman geçerli olmayabilir. URL formatlarında çakışma olup olmadığı mutlaka test edilmelidir.

Controllers/HaberController.cs
public
class HaberController : Controller

{

    public ActionResult Index()

    {

        return View();

    }

 

    public ActionResult Oku(string baslik)

    {

        ViewData["header"] = "Haberin başlığı: " + baslik;

 

        return View();

    }

}

Çıktı elde edebilmek için projemize bir de View nesnesi ekleyelim. Oku metodunun içerisinde mouse ile sağ tıklayıp Add View seçeneğinden Oku adında bir View nesnesi ekliyoruz. Oku.aspx sayfasına sadece ViewData nesnesinin içeriğini yazdıracağız.

Views/Haber/Oku.aspx
<%
@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>

 

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">

    Oku

</asp:Content>

 

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

 

    <h2>Haber Okuma Sayfası</h2>

 

    <%=ViewData["header"] %>

 

</asp:Content>

URL Routing ayarı, Controller nesnesi ve View nesnesi hazır, o halde URL'i test edebiliriz.


Resim: Yapılan yeni ayarlamadan sonra Haber/{baslik} formatındaki bir talebin cevabı

Görüldüğü gibi Haber/Visual-Studio-2010-Beta1-Duyuruldu şeklindeki URL HaberController sınıfının Oku metoduna talep olarak gönderildi. Metodun baslik parametresi de URL'in sonundaki değeri aldı. İşte bu şekilde tanımlamalar yaparak kendi özel URL formatlarımızı oluşturabiliriz.


Birden Fazla Parametreyi Action Metoduna Göndermek

İhtiyacımız olabilecek bir diğer durumu da URL içerisinde yer iki değişken değerin action metoduna gönderilmesi olabilir. Burada dikkat edeceğimiz nokta metottaki parametre sırası nasılsa URL'de de aynı şekilde olmalıdır. Şöyle bir URL örneği üzerinden devam edelim; www.umutluoglu.com/Haber/Liste/Duyuru/NormalSirala. URL'in amacı belirli bir kategorideki haberleri istenilen sırada getirmesi; örneğin Duyuru/NormalSirala şeklindeki bir URL Duyuru kategorisindeki haberlerin alfabetik olarak A'dan Z'ye doğru sıralanmasını sağlarken, Bilisim/TersSirala şeklindeki bir URL Bilisim kategorisindeki haberlerin alfabetik olarak Z'den A'ya doğru sıralanmasını sağlıyor. Bakalım bu tarz bir URL Routing ayarlaması ve bu ayarlamaya karşılık gelecek action metodu nasıl yazılıyormuş;

Global.asax

 public static void RegisterRoutes(RouteCollection routes)

{

      ...

 

      routes.MapRoute(

            "HaberKategoriSiralama",

            "Haber/Liste/{kategori}/{sira}",

            new { controller = "Haber", action = "KategoriListe" }

      );
}


Controllers/HaberController.cs
public class HaberController : Controller

{

    ...

 

    public ActionResult KategoriListe(string kategori, string sira)

    {

        if(sira == "TersSirala")

            ViewData["bilgi"] = kategori + " kategorisindeki haberler ters sırada getirildi";

        else

            ViewData["bilgi"] = kategori + " kategorisindeki haberler normal sırada getirildi";

 

        return View();

     }

}

Burada dikkat edilmesi gereken durum kategori ve sira değerlerinin sıralaması olacaktır. Duyuru/NormalSirala şeklinde bir URL'de kategori=Normal, sira=NormalSirala olacaktır. Yani kazara yazılan NormalSirala/Duyuru şeklindeki bir URL'deki değerler elbetteki düzgün yorumlanamayacağı için kategori=NormalSirala, sira=Duyuru olarak algılanır. Hemen URL'in testini yapıyoruz.


Resim: Haber/Liste/{kategori}/{sira} şablonundaki bir URL'e gelen talebin cevabı

Peki, URL içerisinde bulunacak parametre sayının belirli olmadığı durumlarda nasıl bir yol izlemek gerekir? Böyle bir URL formatını sitemizin arama motoru için düşünebiliriz. Kullanıcılar bazen tek kelime aramak isteyebilirken bazen de 4-5 kelimeyi aratmak isteyebilirler. Örneğin Haber/Arama/seminer gibi bir arama yapılabileceği gibi Haber/Arama/seminer/asp.net/istanbul/mayıs gibi bir arama da yapabilir. Burada ilk iki kelime bizim için sabit, bunun dışındaki kelimeler ise değişken değerler olacaktır. İlk iki kelimeden sonra gelen kelimelerin sayısı belirli olmadığı için URL Routing'de belirli olmayan sayıdaki değerleri elde edebilmek için {*id} gibi bir kullanım gerçekleştirilebilir. id değeri URL'e yazılan diğer tüm kelimeleri tek bir string değer olarak getirecektir. Aşağıda bu tarz bir URL Routing ayarının nasıl yapılabileceği ve gelen değerlerin nasıl okunabileceği görülmektedir.

Global.asax
public static void RegisterRoutes(RouteCollection routes)

{

   ...

 

    routes.MapRoute(

        "HaberArama",

        "Haber/Arama/{*kelimeler}",

        new { controller = "Haber", action = "Arama" }

    );

}



Controllers/HaberController.cs
public class HaberController : Controller

{

    ...

 

    public ActionResult Arama(string kelimeler)

    {

        string metin = "";

        foreach (string kelime in kelimeler.Split('/'))

            metin += kelime + "<br/>";

        ViewData["deger"] = metin;

 

        return View();

    }
}

  

Aşağıdaki resimde arama URL formatımızın gayet güzel bir şekilde okunup içeriğindeki tüm kelimelerin yakalandığı görülebilir.


Resim: Haber/Arama/{*kelimeler} URL formatında ele alınan bir talep

25 Mayıs 2009 Pazartesi 12:49

İzmir Ege Üniversitesi Seminerleri – ASP.NET 3.5, Dynamic Data ve MVC Sunumlarım

Bu hafta sonu İzmir’de Ege Üniversitesi’ndeyiz. 2 gün boyunca 7 farklı oturumda İzmirlilere dolu dolu bir içeriği sunacağız. Benim de ASP.NET MVC ile ASP.NET 3.5 ve Dynamic Data başlıkları ile iki oturumum olacak. Ege Üniversitesi Bilgisayar Mühendisliği Bölümü B4 Amfisinde gerçekleşecek olan bu etkinliğe İzmirli yazılımcı ve tasarımcıları bekliyoruz.

23 Mayıs Cumartesi
10.30-11.30 Yazılımda Kullanıcı Deneyimi Tasarımı
12.30-14.00 Expression Design ile Tasarım
14.15-16.00 ASP.NET MVC
16.15-17.15 WPF ve MultiTouch programlama

24 Mayıs Pazar
10.30-12.00 Silverlight 3.0 Yenilikleri
13.00-15.00 ASP.NET 3.5 ve Dynamic Data
15.30-17.30 RAD Dünyası!

Yer: Ege Üniversitesi Bilgisayar Mühendisliği Bölümü B4 Amfisi

Konuşmacılar: Sümeyra AKÇAY, Daron YÖNDEM, Uğur UMUTLUOĞLU

21 Mayıs 2009 Perşembe 08:56

AJAX Control Toolkit Editor ve ColorPicker Kontrolleri

AJAX Control Toolkit gün geçtikçe büyüyor ve gerçekten başlı başına dev bir kontrol kütüphanesi haline geliyor. ASP.NET uygulamalarında kullanabileceğimiz bu kontrol kütüphanesine geçtiğimiz günlerde kullanışlı iki kontrol daha eklendi. Bunlardan özellikle Editor kontrolü her uygulama geliştiricinin ihtiyacı olabilecek bir WYSIWYG editörü(HTML editörü diyebiliriz). Herhangi bir ayarlama yapmanıza, resim dosyalarını bir dizine taşımanıza gerek yok(Resim dosyalarının Generic Handler üzerinden üretilmesi sağlanmış, ama isterseniz dosyaları fiziksel olarakta sunucunuzda saklayabiliyorsunuz). Piyasadaki diğer HTML editörlerine göre basit kullanımı olduğunu söyleyebilirim. Aşağıda bu kontrol için gerekli kod parçalarını ve kontrolün çıktısını görebilirsiniz.

Editor kontrolü için kontrolü sayfaya register etmemiz ve kontrolü bir element olarak eklememiz yeterli.

<%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit.HTMLEditor" tagprefix="cc1" %>

...

<cc1:Editor ID="Editor1" runat="server" />

 Control Toolkit HTML Editor
Resim: Editor kontrolü ile ASP.NET uygulamalarında HTML içeriklerinizi düzenleyebilirsiniz.

 

Bir diğer yeni kontrol de ColorPickerExtender. Bu kontrol ise kullanıcının renk tablosundan seçtiği rengin kodunu getiriyor. Extender kontrolü olduğu için bir ASP.NET kontrolüne bağlanması gerekiyor. Kontrole odaklanıldığında ColorPicker bir popup penceresi olarak açılır ve kullanıcının bu tablodan seçtiği rengin Hexadecimal kodu bağlanılan kontrole yazılır. Aşağıdaki kod parçasında ColorPickerExtender’ın bir TextBox’a nasıl bağlanacağını görebilir, resimlerden de bu bağlama işleminin nasıl yapıldığını inceleyebilirsiniz.

<%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="cc1" %>

...

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

<cc1:ColorPickerExtender ID="TextBox1_ColorPickerExtender" runat="server"

    Enabled="True" TargetControlID="TextBox1"></cc1:ColorPickerExtender>

ColorPickerExtender'ın Eklenmesi
Resim: ColorPickerExtender’ın TextBox kontrolüne bağlanması

 


Resim: ColorPickerExtender kontrolünün çıktısı

 

AJAX Control Toolkit’in son sürümünü bilgisayarınıza kurmak ve incelemek için CodePlex sayfasından gerekli yükleme işlemlerini yapabilirsiniz. Son bir not; bu sürüm .NET Framework 3.5 SP1 üzerinde çalışıyor!

20 Mayıs 2009 Çarşamba 09:05

.NET Framework 4.0 Beta1 ve Visual Studio 2010 Beta 1 Resmen Duyuruldu

Eğer MSDN üyesi değilseniz başlığa bakıp hemen heyecanlanmayın, çünkü herkese açık yüklemeler tahminen 1 hafta içinde başlayacak. Eğer MSDN üyesi iseniz .NET Framework 4.0 ve Visual Studio 2010’un Beta1 sürümlerini bilgisayarınıza yükleyebilirsiniz. MIX’09 sunumlarını izlemeyenler için en büyük süprizlerden birini söyleyeyim; Visual Studio 2010 arayüzü WPF ile tasarlandı. Visual Studio ile ilgili ilk izlenimim ise RAM kullanımı biraz yüksek olsa da çok hızlı! WPF ile hazırlanan arayüzlerin Vista üzerinde sizde bırakacağı seyir zevki gerçekten oldukça hoş. 1-2 sorun ile karşılaştım ama Beta sürüm sonuçta gayet normal.

Bu post 21 Mayıs 2009 09:04'te güncellendi. Ek bilgiler aşağıdadır:

Herkese açık download linkleri:

Visual Studio 2010 Professional Beta 1 – Web Installer
http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=75cbcbcd-b0e8-40ea-adae-85714e8984e3

Visual Studio Team System 2010 Team Suite Beta 1 – Web Installer

http://www.microsoft.com/downloads/details.aspx?FamilyID=85520793-68fc-4361-a8b6-dc2cff49c8d2&displaylang=en

20 Mayıs 2009 Çarşamba 08:48

nedirtv?com – Mayıs Ayı Webinerleri

nedirtv?com ekibi olarak bu ayda 6 farklı webinerle programımıza devam ediyoruz. Benim de 18 Mayıs 2009 Pazartesi günü ASP.NET MVC – URL Routing ile katkıda bulunacağım bu ayda SQL Server Integration Services, WCF, WF ve XNA Game Studio ile ilgili webinerler yer alıyor.

Webiner programını incelemek ve etkinliği facebook’taki takviminize kaydetmek için bu linki kullanabilirsiniz.

11 Mayıs 2009 Pazartesi 21:22

Bir Sayfada Birden Fazla DefaultButton Kullanımı

ASP.NET sayfalarında kullanıcının, doldurduğu form bilgilerini kolay şekilde buton nesnesi ile sunucuya gönderebilmesi için <form> elementindeki defaultbutton özelliğine buton kontrolünün ID değerini atayabiliriz. Böylece kullanıcı butona tıklamadan klavyeden enter tuşuna bastığında formdaki bilgiler sunucuya gönderilir. Peki sayfamızda farklı formlar varsa(örneğin sayfanın sol kısmında login formu, sağ kısmında kullanıcı kayıt formu) kullanıcı o an hangi form üzerinde enter tuşuna basarsa içerisinde bulunduğu formun butonuna tıklanmasını nasıl sağlarız? Yine DefaultButton özelliğini kullanarak yapabiliriz ama <form> elementinin defaultbutton özelliği değil!

Bu tarz bir işlem için öncelikli olarak her iki formu da birer Panel kontrolü içerisine almamız gerekir. Panel kontrolünün de aslında DefaultButton adında bir özelliği vardır. Dolayısıyla her iki panelin kendi içlerinde yer alan ve submit işlemini yapacak butonun ID değerini Panel’in DefaultButton özelliğine atarsak formlar istediğimiz şekilde davranabilecektir. Eğer panellerin dışında başka bir formunuz daha varsa ve bu panellerin dışında enter tuşuna basıldığında bu formun içerisindeki bir butonun tetiklenmesini istiyorsanız yine <form> elementinin defaultbutton özelliğini kullanabilirsiniz. Aşağıdaki kod parçalarını bir sayfa üzerinde test ederseniz durum gayet açık şekilde anlaşılacaktır :)

Default.aspx
<
form id="form1" runat="server" defaultbutton="button1">

    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

    <asp:Button ID="button1" runat="server" Text="Button-1" OnClick="btn_Click" />

    <br />

    <asp:Panel ID="panel1" runat="server" BackColor="LightGreen" DefaultButton="button2" Width="300">

        <asp:TextBox ID="text1" runat="server"></asp:TextBox>

        <asp:Button ID="button2" runat="server" Text="Button-2" OnClick="btn_Click" />

    </asp:Panel>

    <asp:Panel ID="panel2" runat="server" BackColor="LightBlue" DefaultButton="button3" Width="300">

        <asp:TextBox ID="text2" runat="server"></asp:TextBox>

        <asp:Button ID="button3" runat="server" Text="Button-3" OnClick="btn_Click" />

    </asp:Panel>

</form>



Default.aspx.cs

protected
void btn_Click(object sender, EventArgs e)

{

    Response.Write("Tıklanan buton: " + ((Button)sender).Text);

}

 

8 Mayıs 2009 Cuma 00:19
Etiketler:  
Kategori:   ASP.NET
İşlemler:   Arkadaşına Gönder | del.icio.us | Permalink | Yorumlar (0) | Yorumlar RSSRSS comment feed

 
Add to Technorati Favorites