Codebehind Javascript

Uzun zamandır yazmıyordum. Kısa bir teknik yazıyla geri döneyim dedim. Belki devamı gelir bu tür kısa yazıların. Temelden bir konuyu anlatmaktansa bu şekilde küçük problemlere çözüm olabilecek yazılar yazmayı planlıyorum.

Başlıktan da anlaşılabileceği amaç bir ASP.NET uygulamasında codebehind’da javascript çalıştırmak. Böyle bir şeye niye ihtiyaç var diye sorulabilir. Bilindiği gibi ASP.NET’de halihazırda bir messagebox yok. Bunu javascript’le, uygulamamızda ihtiyacımız olduğu yerde kullanıp, daha kolay yönetmek adına codebehind’da yazıp çalıştırabiliriz. Diğer taraftan, kod içinde geçen bir değişkeni veya resx dosyalarından bir değeri yazdırmak istediğimizde, javascript’i codebehind’da yazmak faydalı olacaktır.

Örneğimizde bir dropdownlist’den bir meslek seçmek isteyelim. DropDownList’in seçtiğimiz eleman “Seçiniz” ise; javascript ile ekrana bir uyarı verelim. Ekrana vereceğimiz uyarıyı da bir resx dosyasında tutalım.

Projemiz çok basit. Bir tane JobsDropDownList id’li bir dropdownlist’imiz ve SaveButton id’li bir butonumuz var. DropDownList’in içinde de 4 tane item var. “Seçiniz, Öğrenci, Çalışan ve Emekli”.

Codebehind’a scriptimizi oluşturacak olan metodumuzu yazıyoruz.

private void SetDropDownListScript()
{
     StringBuilder script = new StringBuilder();
     script.Append(“<script type=’text/javascript’>”);
     script.Append(“function validate()”);
     script.Append(“{“);
     script.Append(“if (document.getElementById(‘” + JobsDropDownList.ClientID + “‘).value == ‘” + dropDownListDefaultValue + “‘)”);
     script.Append(“{“);
     script.Append(“alert(‘” + warning + “‘);”);
     script.Append(“}”);
     script.Append(“}”);
     script.Append(“</script>”);
     Page.ClientScript.RegisterClientScriptBlock(this.GetType(), “DropDownListScript”, script.ToString(), false);
}

Burada StringBuilder class’ını çağırabilmemiz için System.Text namespace’ini  yazmamız gerekiyor ve tabi ki reference’ı ekli olması gerekiyor (ki default olarak ekli).

Aslen bu kod bloğunda yaptığımız yeni bir şey yok. Bildiğimiz javascript kodunu yazıyoruz. İşin tek esprisi var. If bloğunda karşılaştırma yaptığımız değer “dropDownListDefaultValue” değişkeni kodumuzun içinde string olarak tanımlanan ve sayfanın Load’unda değerini resx dosyasından alan bir değişken. Ha keza ekrana bir messagebox olarak yazdırdığımız “warning” de aynı şekilde. Son satırda ise bu yazdığımız script’i “DropDownListScript” key’iyle register ediyoruz.

public static string warning = “”;
public static string dropDownListDefaultValue = “”;

protected void Page_Load(object sender, EventArgs e)
{
    warning = GetLocalResourceObject(“Warning”).ToString();
    dropDownListDefaultValue = GetLocalResourceObject(“DropDownListDefaultValue”).ToString();
    SetDropDownListScript();
    SaveButton.OnClientClick = “validate()”;
}

Sayfamızın property’le
rine baktığımızda yukarıda bahsettiğimiz warning ve dropDownListDefaultValue değişkenlerini görüyoruz. Bunlar değerlerini resx dosyasından alıyorlar. Script kodumuzu oluşturmak için yazdığımız metodu da yine burada çağırıyoruz ve son satırda butonumuzun OnClientClick metoduna yazdığımız script fonksiyonunu set ediyoruz(dikkat: register ettiğimiz key’i değil, hangi fonksiyonu çalıştırmak istiyorsak onu).

Bu şekilde artık DropDownList’imizde “Seçiniz” seçili iken butonumuza basarsak resx dosyasından aldığımız uyarı mesajı ekrana basılacaktır. Böylece uyarı mesajını değiştirmek istediğimizde koda dönmeden, resx dosyasına istediğimiz uyarı mesajını yazabiliriz. Tabi ki yukarıda yazdığımız kod ve görüntülenen mesaj client tabanlıdır. Haliyle server işleyişini durdurmayacaktır. Buradaki amaç codebehind’a javascript kodunu yazıp, çalıştırmaya bir örnek vermektir.

Projeyi buradan indirebilirsiniz: http://www.2shared.com/file/sV1SggxH/CodeBehindJavaScript.html

VeriPark

30 Mayıs Pazartesi günü VeriPark bünyesinde Yazılım Geliştirme Uzmanı pozisyonunda yeni işime başlayacağım. Henüz mezun olmadan, finaller bile bitmeden işe başlayacağım aklıma gelmemişti. Teşekkürler, hoşbuldum.

Peaceful Moments

Kasım’daki uyduruk yazıyı saymazsak; Ağustos’dan beri bir şeyler iliştirmemişim buraya. Bunun en önemli sebebi aşağı yukarı kimsenin yazdıklarımı okumaması. Kimse okumadıkça ben yazmadım, ben yazmadıkça da iyice çoraklaştı buralar. Hali hazırda zaten çok az konuşan birisi olduğumdan dolayı, “ulan dilime değil de elime vurmuştur belki, oturayım yazayım” diye düşünerek açmıştım burayı ama o yetenek de yokmuş mına koyim. Neyse…

Özet geç diyen incicilere 24 Ağustos’dan beri n’apmışım bir anlatalım bakalım. Özetle bir bok yapmadım aslında. Yaz aylarını bir yazılım şirketinde .NET teknolojisi üzerine web, masaüstü ve mobil uygulamalar geliştirerek geçirdikten sonra okulun yolunu tuttum ve son senemin başlangıcını yaptım. Bütün derslerin seçmeli olması sebebiyle ilk defa istediğim gibi bol bol bilgisayar dersleri alabildim. Sayın hocam Yrd.Doç.Dr. Murat Demirer sayesinde Simulasyon, Bulanık Mantık, Yapay Zeka, Yapay Sinir Ağları gibi başından beri merak ettiğim konulara uzaktan da olsa bir bakış atabildim. Simulasyon dersi için çeşitli algoritmaları kullanarak bir Random Number Generator ve bunun random’lığını ölçen bazı testlerin programını yazdım. Fizik bölümünün düzenleyeceği sempozyumda kullanılmak üzere okula bir program yazdım. Onun dışında, yaz aylarında çalıştığım şirkete mobil uygulamalar geliştirmeye devam ettim. Freelance takılırken bir yandan da şirketlerde part-time (sanki boş zamanım varmış gibi), stajyer yazılımcı gibi pozisyonlar bakındım. Velhasıl sonunda Veripark  (http://www.veripark.com/) bana 6 haftalık bir staj okulu için geri dönüş yaptı. Her ne kadar sömestra geliyor olsa da okulun 2. döneminin ilk 3 haftasını kaçıracaktım. Olsun dedim.  Sonuç olarak bana bir web projesi ve 1 hafta süre verdiler staj okuluna kabul edilmem için. Projeyi yapıp, yolladım ve kabul edildim. Okulun ilk döneminin finallerinde staja başlamış olduk.

Staja başladığımın 2. günü ise Business Solutions bölümü beni kendi ekiplerine kattılar ve her zaman olduğu gibi sürüden ayrılmış oldum. İlk 2 haftayı Microsoft Dynamics CRM, Javascript, Reporting Services v.s. öğrenek geçirdim. Daha sonraki 4 haftayı ise (özellikle son 2 haftası çok yoğun olmakla birlikte) özel bir banka için geliştirilen CRM uygulamasına Javascript ile validasyon yazarak, Dynamics üzerine C# ile plug-in geliştirerek ve test edip raporlayarak geçirdim. Tüm bu dönem içinde ekip üyelerinin yardımseverliği de üst düzeydeydi. Sonuç olarak keyifli ve önemli bir tecrübe edinmiş oldum Veripark’da (kesme işareti ile ayrılan b,c,d,g sertleşmez ve p,ç,t,k diye de yazılmaz, bunu da öğrenin artık). Yardımı dokunan herkese teşekkürler. Bu sırada aldığım derslerin notları da açıklandı ki 7 dersin 6’sını A getirerek azıcık hayvani bir performans gösterdim. Olsun o kadar.

Daha başka şeyler de oldu Ağustos’dan bugüne kadar tabi. Hatta hayatımın daha önemli kısmını kapsayan şeyler onlar ama bu yazıya dahil etmiyorum. Sonuç olarak yine tutmayacağım bir söz vereyim. Bundan sonra buraya daha sık yazmaya çalışacağım. Hatta eğer zaman bulabilirsem C#, ASP.NET, SQL Server, WebServices, CSS, HTML, Javascript’i içeren bir web projesi hazırlayacağım ve bu projeyi de buradan adım adım makale olarak yazacağım. Bu saydıklarımı yeni öğrenen veya öğrenmiş birilerinin elinde tam ve güzel bir proje olsun istiyorum. Açıkçası ben bu işin başlarındayken bunun eksikliğini hissetmiştim. Kendi kendime “eee az çok .NET öğrendim ama bir e-ticaret uygulaması nasıl geliştirilir ki” diye sorup, cevap veremeden mal gibi kaldığım çok olmuştu. Benim oldu başkalarının olmasın diyerek, şöyle 3 katmanlı bir uygulama yapıp, makaleler halinde yayınlayabilirim tembellik etmezsem. İhtiyacı olan varsa yararlanır.

Görüşmek üzere…

Yazarken çalıyordu: http://www.youtube.com/watch?v=dCk7wpk5Fys

aklımda…

Uzun bir süredir yoğunluktan dolayı buraya yazamıyorum ama tez vakitte birkaç yazı ile geri döneceğim.

Emülatör içine dosya atmak

Bir süredir işim gereği mobil programlama ile uğraşıyorum. Daha önce bulaştığım bir alan değildi. Haliyle bol bol hatayla karşılaştım ve İngilizce siteler de dahil olmak üzere direk çözüm bulamadığım konular oldu. Bugün bir şekilde, içinde bol bol kayıt olan bir .txt dosyasını emülatör içine atmam gerekti. Normalde emülatör içinde bir .txt dosyası oluşturulabiliyor tabi ama önemli olan içindeki verilerdi. Bilgisayardaki .txt (ya da herhangi bir dosyayı) emülatör içine atmak için yapılması gereken şu.

Başlat – Tüm Programlar – Microsoft Visual Studio 2008 – Visual Studio Remote Tools – Remote File Viewer’ı açarak; karşımıza gelen ekranda ilgil emülatörümüzü seçiyoruz. Daha sonra File – Export File’ı kullanarak emülatör içine atmak istediğim dosyayı seçiyoruz ve dosyamız artık emülatör içinde kullanılmaya hazır.

DropDownList sorunu

ASP.NET kullanarak yapmış olduğum web sitesinde dropdownlist kullanırken bir sorunla karşılaştım. Sql Data Source kullanarak verileri dropdownlist’e dolduruyordum. DataTextField’da ilgili alan gözüküyordu ama şöyle bir sorun vardı. Dropdownlist’in ilk değeri daima o alanlardan birisi ile dolu oluyordu. Bu ise; özellikle tek kayıt olduğunda problem çıkarıyordu çünkü bu durumda index değişikliği yapamıyordum ve dropdownlist’in SelectedIndexChanged event’ı çalışmıyordu. Haliyle seçili elemanın hiç bir özelliğini textbox’larımda göremiyordum. Benim istediğim dropdownlist’in ilk değerinin boş ya da “seçiniz” gibi bir şey olmasıydı. Masaüstü yazılımlarda combobox’ın selectedindex’ine -1 atayarak yapılan çözüm burada işe yaramadı tabi ki. Ben de araştırarak şu çözümü buldum ve paylaşmak istedim.

<asp:DropDownList ID=”ddlmesajgetir” runat=”server” AutoPostBack=”True”
DataSourceID=”SqlDataGelenMesajlar” DataTextField=”baslik”
DataValueField=”refno” Height=”25px” Width=”174px”
onselectedindexchanged=”ddlmesajgetir_SelectedIndexChanged”
AppendDataBoundItems=”True”>
<asp:ListItem Enabled=”true”>Seçiniz</asp:ListItem>
</asp:DropDownList>


Gördüğünüz üzere “ddlmesajgetir” isimli bir dropdownlist ve bağlı bir “SqlDataGelenMesajlar” isimli SqlDataSource’muz var. Bu durumda yukarıdaki sorun ortaya çıkıyordu. Bunu çözmek için ise kodlarda da  gözüktüğü üzere dropdownlist’in properties’inden AppendDataBoundItems özelliğini True yapıyoruz (default olarak “False” gelir) ve dropdownlist’imize “Seçiniz” gibi bir item ekliyoruz. Böylece problem ortadan kalkıyor.

Kaynak

Bu yazıda, çalışırken ve araştırma yaparken yararlandığım Türkçe web sitelerini paylaşmak istedim. Çoğu .NET ağırlıklı ve aslında bilinen siteler. Yine de toplu bir şekilde elinin altında durmasını isteyenler için yararlı olabileceğini düşünüyorum.

http://www.csharpnedir.com/
http://www.yazgelistir.com/ Makaleleri okumak için üyelik gerekli
http://www.sanalkurs.net/
http://www.kariyervideo.com/
http://www.durgut.com/ Tüm dersler video anlatımlı
http://www.yazilimuzmani.com/
http://nedirtv.com/
http://www.uzmaninasor.com/ İş zekası hakkındaki yazılar oldukça yararlı
http://www.yazilimgunlugu.com/
http://www.buraksenyurt.com/ Burak Hoca’nın kişisel sitesi

One Silver Dollar

İşe başladım. Yazın çalışmayı düşünüyordum zaten. 1.5 ay önce de okuldaki hocalarımdan birinden teklif gelince kabul ettim ve 2 hafta önce Pusula Yazılım’da çalışmaya başladım. Bu yazı bu şekilde geçireceğim.

Pusula, kuyumculuk sektörüne yönelik otomasyon programları geliştiriyor. Yaptıkları iş web ile ilgili değil. Yoğun bir şekilde veritabanı kullanan masaüstü yazılımları yapıyorlar. Ama ben web işlerinden sorumlu olarak işe başladım. Bunun sebebi de öncelikle şirkete eli yüzü düzgün, dinamik bir web sitesi kazandırmak (şimdiki oldukça kötü). Sonra da bazı işleri artık web üzerinden götürmeyi sağlayacak uygulamaları siteye eklemek. Bu yüzden ben de işe öncelikle sade, hoş bir tasarım yapmakla başladım. Tasarım için Microsoft’un Expression Web 3 programını kullandım. Programlamasını ise C# ve Asp.Net 3.5 platformuyla yapıyorum. Veritabanı olarak SqlServer 2008 kullanıyorum. Header, sabit menü ve dinamik menüyü içeren kısmını Master Page olarak yaptım. İçerik kısımını da yapmaya devam ediyorum. Bu siteyi yapma süreci benim için aynı zamanda bolca şey öğrenmek demek. Tasarım bu konulardan biri mesela. Malum yazılımcı olduğum için tasarımla pek bir ilgim yok ama iş başa düşünce insan öğrenmek durumunda kalıyor. Fena da olmuyor açıkçası. Örneğin, sitede programların ekran görüntülerini ve referans şirketlerin logolarını görüntülemek için bir slider kullandım. Birkaç program için sayfaları tasarladım. Daha sonra resimlerin boyutunun büyük olduğunu düşünüp onları daha da ufaltacak bir yol aradım (ki Photoshop’da save for web seçeneği bu konuda çok yardımcı oluyormuş onu öğrendim). Derken Cuma sabahı siteyi görüntülemek istediğimde hiç bir slider’ın Chrome ve Firefox’da çalışmadığını gördüm. Neden diye düşünürken; Flash güncellemesinin buna sebep olduğunu keşfettim. Çatır çatır çalışan slider’ım Flash güncellemesi yapmamla birlikte çökmüştü. Neyse ki Easy Slider 1.7 buna çözüm oldu.

Tasarım işini ufak tefek ayrıntılar dışında bitirdim. İçerikleri ekliyorum. Haber güncellemeleri için gerekli programı yazdım. Siteyi yayına soktuktan sonra da geliştirmelere devam edeceğim. Müşterilerin kullanıcı olarak siteye kayıt olup, bazı işlemleri buradan yapabilecekleri bir sistem düşünüyoruz. Programa ait hataların ve çözümlerin de müşteriye özel raporlanıp veritabanına kayıt edilmesi (böylece benzer sorun başka bir müşteride gerçekleştiğinde bu kayıtlar yardımcı olacak) ve canlı destek olayı da eklemek istediklerimizden. Eğitim videoları, online sipariş ve son olarak da online alışveriş de yapmak istediklerimizden. Tüm bunlar bittikten sonra benim şirkette görevim ne olur onu bilemiyorum. Mevcut programlar sürekli güncellense de teknoloji olarak oldukça eski sayılırlar. Bunları .NET platformunda yeniden yazmak gibi bir plan var. Umarım ben de bu konuda bir görev alırım.

Tüm bunlar dışında okulda 2. senem, 3. sınıfım sona ermiş durumda. Notlarım, okulu 1 yıl erken bitirme planımı gerçekleştirecek şekilde iyi geldi neyse ki…

bu bebeğin biraz bakıma ihtiyacı vardı…

En küçük vidasına kadar montajı ve boyaması bana aittir. Japan Air Self Defense Force F15J EAGLE. Resimlerin büyük halleri için üzerlerine tıklayınız.


aklın yolu birdirbir…

Her gün başına birbirinden enterasan olaylar gelmeyen, sıradan birisi olarak anlatacak pek fazla anım yok. Evet, öyle…

Hani içi yemek dolu tencereye bir kaşık koyar ve o kaşığı kapakla tencere arasına sıkıştırırsınız ya… İşte ben kapağı kaldırınca kaşığı her zaman tencerenin içine düşürenim.

Elimi sokak kedisi tırmaladı. Niye yaptı bilmiyorum ama bu bana 5 kuduz aşısı ve 1 tetanos aşısına mal oldu. Yine de bu olayın kedilerle aramda süregelen ezelî ve ebedî dostluğa gölge düşürmemesi için ivedilikle çalışmalara başladım. Yaptığım bu çalışmaları daha sonra bir kitap olarak piyasaya sürmeyeceğim.

Yarın kompleks analiz finalim var. Kompleks analizle ilgili herhangi bir sorunuzu bana yöneltmeyiniz, kalbinizi kırarım.

Bir de dünya aslında çok boktan bir yer.

Return top