Tek tık ile Disable Button & Postback

by Yasin Sirkecili 11. Şubat 2010 15:34

Kredi kartı çekim işlemleri gibi yaptığınız kritik işlemler esnasında butona bir kere tıklandığında sayfa postback işlemini tamamlayana kadar kullanıcının ard arda tekrar butona basmasını engellemeniz gerekir.
Bu tip durumlarda

btnOrder.Attributes.Add("onclick", "this.disabled=true;" + ClientScript.GetPostBackEventReference(btnOrder, "").ToString());

kodunu kullanarak Butona 1. kez tıklandığında öncelik butonu disable konuma getirip sonrasında butonun postback işlemini tamamlamasını sağlayabilirsiniz.

7 kişi tarafından 5.0 olarak değerlendirildi

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

ASP.NET

DefaultButton belirlemek

by Yasin Sirkecili 11. Şubat 2010 15:32

ASP.NET sayfalarında o an için içeriğinde bulunduğunuz textbox a göre Enter tuşunun hangi butonu harekete geçireceğini aşağıda kod ile belirleyebilirsiniz. 

txtboxName.Attributes.Add("onkeypress", "javascript:return WebForm_FireDefaultButton(event, '" + btnName.ClientID + "')");

7 kişi tarafından 5.0 olarak değerlendirildi

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

ASP.NET

Makalelerimden bazıları

by Yasin Sirkecili 2. Kasım 2009 15:16

5 kişi tarafından 4.2 olarak değerlendirildi

  • Currently 4,2/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

ASP.NET | C# | Yasin Sirkecili

SmtpClient SendCompleted Event

by Yasin Sirkecili 23. Ekim 2009 12:12

System.Net.Mail namespace'i altında yer alan SmtpClient sınıfını kullanarak mail gönderme işleminden daha önce bahsetmiştim. Bu yazıda sadece SmtpClient class'ından türettiğiniz instance'in Send(); fonksiyonunun sonucunda oluşan SendCompleted event'ini inceleyeceğiz.

Basitce bir mail gönderme uygulaması yazacak olursak;

protected void Button1_Click(object sender, EventArgs e)
{
SmtpClient smtppc = new SmtpClient("mail.alanadi.com");
smtppc.SendCompleted +=
new SendCompletedEventHandler(smtppc_SendCompleted);
MailAddress frommail = new MailAddress("from@alanadi.com", "From Sender Name");
MailAddress tomail = new MailAddress(to@alanadi.com);
MailMessage yenimail = new MailMessage(frommail, tomail);
yenimail.SubjectEncoding = System.Text.
Encoding.GetEncoding("ISO-8859-9");
yenimail.BodyEncoding = System.Text.
Encoding.GetEncoding("ISO-8859-9");
yenimail.Subject = TextBox1.Text.Trim();
yenimail.Body = TextBox2.Text.Trim();
yenimail.IsBodyHtml =
false;
yenimail.Priority =
MailPriority.High;
System.Net.
NetworkCredential izin = new System.Net.NetworkCredential("from@alanadi.com", "password");
smtppc.UseDefaultCredentials =
false;
smtppc.Credentials = izin;
smtppc.Port = 587;
try
{
smtppc.Send(yenimail);
}
catch
{
ScriptManager.RegisterStartupScript(Page, typeof(string), Guid.NewGuid().ToString(), "alert('Hata Oluştu');", true);
return;
}
}
protected void smtppc_SendCompleted(object sender, EventArgs e)
{
ScriptManager.RegisterStartupScript(Page, typeof(string), Guid.NewGuid().ToString(), "alert('lletiniz gönderildi');", true);
}

Gözlemleyebildiğiniz gibi try blogu içerisinde mail gönderme işlemi başarı ile sonuçlandıktan sonra smtppc_SendCompleted event'i tetiklenecek ve bu blok içerisine yazdığınız kodlar çalışacaktır. Tek yapmanız gereken SmtpClient nesnesinden bir instance türettikten sonra SendCompleted eventini

smtppc.SendCompleted += new SendCompletedEventHandler(smtppc_SendCompleted);

şeklinde türeterek karşılık gelen ilgili fonksiyonu türetmektedir.

kolay gelsin...

5 kişi tarafından 4.0 olarak değerlendirildi

  • Currently 4/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

ASP.NET | C#

Free IP to Geographic Location

by Yasin Sirkecili 23. Ekim 2009 11:30

 

IPINFODB.COM un sundugu ücretsiz lokasyon tesbiti uygulamasını kullanarak kullanıcıların IP Adresinden bulundukları lokasyonu kolayca tesbit edebilirsiniz. Normalde böyle bir uygulama için IP2LOCATION.COM a yüklü miktarda para ödemeniz gerekebilir. Ama bunu ücretsiz olarak kullanabilirsiniz.

DataSet dset = new DataSet();
dset.ReadXml(
http://ipinfodb.com/ip_query.php);
Label1.Text = dset.Tables[0].Rows[0][
"CountryName"].ToString();
Label2.Text = dset.Tables[0].Rows[0][
"City"].ToString();

 

Ben sadece Ülke adı ve Şehir adı bilgisini aldım ancak dönen XML verisinin tamamı şöyledir;

 <Response>
  <Ip>95.70.229.81</Ip>

  <Status>OK</Status>
  <CountryCode>TR</CountryCode>
  <CountryName>Turkey</CountryName>
  <RegionCode>34</RegionCode>
  <RegionName>Istanbul</RegionName>
  <City>Istanbul</City>
  <ZipPostalCode />
  <Latitude>41.0186</Latitude>
  <Longitude>28.9647</Longitude>
  <Timezone>2</Timezone>
  <Gmtoffset>2</Gmtoffset>
  <Dstoffset>3</Dstoffset>
</Response>

Siz kendinize göre ihtiyacınız olan verileri kullanabilirsiniz.

Kullanıcılarınızı üye olurken, uçak bileti alırken, tatil sepeti kiralarken vb...  seçtiği dropdownlistlerde bulunduğu lokasyonu otomatik olarak seçili getirip şaşırtabilirsiniz :)

kolay gelsin...

4 kişi tarafından 4.5 olarak değerlendirildi

  • Currently 4,5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

ASP.NET | C#

VSTO - C# - OCR with MS Office Document Imaging 12.0

by Yasin Sirkecili 23. Ekim 2009 09:37

Herkese merhabalar;

Bugünkü konumuz printer, daktilo, fotokopi vb. kağıt halindeki çıktılardan tutunda plaka tanıma sistemlerine kadar uzanan insan hayatını kolaylaştıran en sevdiğim yapay zeka uygulamalarından olan OCR(Optical Character Recognition) uygulamasının C# ile nasıl yapılacağına basitce bakacağız. Amacımız JPG dosyasındaki text verileri tanımlayıp *.txt dosyasına aktaracak bir OCR(Optical Character Recognition) uygulaması gerçekleştirmek.

İlk olarak projemize COM objesi olan Microsoft Office Document Imaging 12.0 Type Library referansını ekliyoruz. bu referans eklendiğinde MODI adında bir namespace'in kullanılabilir olduğunu göreceksiniz. Bu API Office 2003 ile birlikte geldiğinden Office 2003 veya üstü versiyonlarla kullanabilirsiniz. Ben projemi bir ASP.NET Web uygulaması olarak gerçekleştirdim siz isterseniz Windows Application kullanarak taranan veriyi richtextbox'a aktarabilirsiniz.

uygulamamızın xhtml görünümü şöyledir;

<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<div>
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
</div>
</form>

Sadece bir FileUpload ve button kontrolü kullandığımız projenin icrası şu yönde olacaktır; Resim seçildikten sonra eğer jpg formatındaysa resmin adı değiştirilip jpgs diye bir klasöre aktarılacak daha sonra burda OCR işlemi gerçekleştirilecek.

if (FileUpload1.HasFile)
{
string uzanti = System.IO.Path.GetExtension(FileUpload1.FileName.ToLower().Replace("", "i"));
if (uzanti == ".jpg")
{
string dosyaadi = DateTime.Now.ToString().Replace(".", "").Replace(":", "").Replace("/", "").Replace("-", "").Replace(" ", "");
dosyaadi += uzanti;
FileUpload1.SaveAs(
HttpContext.Current.Server.MapPath("~/jpgs/" + dosyaadi));
System.IO.
FileStream fstream;
System.IO.
StreamWriter swriter;
try
{
MODI.
Document mdoc = new MODI.Document();
mdoc.Create(
HttpContext.Current.Server.MapPath("~/jpgs/" + dosyaadi));
mdoc.OCR(MODI.
MiLANGUAGES.miLANG_TURKISH, true, true);
MODI.
Image mimg = mdoc.Images[0] as MODI.Image;
fstream =
new System.IO.FileStream(HttpContext.Current.Server.MapPath("~/yasin.txt"), System.IO.FileMode.OpenOrCreate);
swriter =
new System.IO.StreamWriter(fstream);
swriter.Write(mimg.Layout.Text);
swriter.Close();
fstream.Close();
}
catch
{
ScriptManager.RegisterStartupScript(Page, typeof(string), Guid.NewGuid().ToString(), "alert('Hata olutu');", true);
}
}
else
{
ScriptManager.RegisterStartupScript(Page, typeof(string), Guid.NewGuid().ToString(), "alert('.jpg formatında bir dosya seçiniz.');", true);
}
}
else
{
ScriptManager.RegisterStartupScript(Page, typeof(string), Guid.NewGuid().ToString(), "alert('Dosya seçmediniz.');", true);
}

Kodlarımızı açıklayacak olursak;

İlk olarak System.IO.Path sınıfı altındaki getextension fonksiyonundan faydalanarak aktarılan dosyanın .jpg uzantısına sahip olup olmadığını kontrol ediyoruz. Daha sonra bu dosyayı jpgs adında oluşturduğumuz klasöre aktarıyoruz.(Dosya adının çakışmasını engellemek için tarihe göre isim değiştiriyoruz) Sonrasında Jpg file içerisinde taranan karakterleri *.txt dosyasına aktarmamızı sağlayacak olan filestream ve streamwriter classlarından birer instance yaratıyoruz.

MODI.Document mdoc = new MODI.Document();

ile mdoc adında MODI.Document classından OCR işleminde kullanacağımız yeni bir instance türettik.

mdoc nesnesinin Create fonksiyonunu kullanarak parametre olarak taranacak jpg dosyasının yolunu belirtiyoruz.

mdoc nesnesinin sahip olduğu en önemli fonksiyonumuz olan OCR fonksiyonuna gönderdiğimiz parametrelerle tarama işleminin sonuçlanmasını sağlıyoruz. Burdaki parametrelere ait açıklamalar şöyledir;

1 -) LangId : MODI.MiLANGUAGES enum değişkeninde tanımlanan karakter setlerinden size uygun olanı seçmenizi sağlar.
2- ) OCROrientImage : Sayfanın yatay veya dikey olup olmadığının API tarafından algılanmasını sağlayan boolean tipli bir değerdir.
3- ) OCRStraightenImage :  API tarafından image üzerindeki karakter tanımayı engelleyici eğimlerin otomatik olarak düzenmesine karar veren  boolean tipli değişkendir.

daha sonra MODI.Image tipinde oluşturduğumuz mimg nesnemize mdoc içerisindeki resimlerden istediğimizi aktarıyoruz.(Biz tek bir resim üzerinde işlem yaptığımızdan 0 index'ine sahip resmi aktardık)

bu işlemleri tamamladıktan sonra taranan ve karakter haline çevrilen verileri yasin.txt dosyasına yazarak filestream, streamwriter nesnelerinden türettiğimiz instance'ları Close(); methoduyla sonlandırarak jpg file içerisindeki karakterlerin yasin.txt dosyasına aktardığını gözlemleyebiliriz.

OCR işlemlerinin en basit hali bu şekilde uygulanabilir, dilerseniz siz daha detaylı OCR uygulamaları geliştirebilirsiniz.

kolay gelsin...

 

5 kişi tarafından 4.6 olarak değerlendirildi

  • Currently 4,6/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

ASP.NET | C#

Asp.net 4.0 Route Image Css Display Problem

by Yasin Sirkecili 30. Eylül 2009 13:24

ASP.NET 4.0 ile birlikte gelen System.Web.Routing namespace i ile artık URL Rewrite işlemlerini yaparken ne web.config dosyasının dinamik düzenlemesine gerek kalıyor nede reqular expressionlar ile uğraşmamıza Microsoft bizi düşünüp gerçekten olayı çok çok basite indirgemiş ancak ne varki; ne yaparsanız yapın URL Rewrite işlemlerinin hepsinde tarayıcılara bağlı olarak html nesnelerinin path gerektiren attributelarına atanan değerler tarayıcı üzerindeki url yi baz alarak düzenleneceğinden resimlerinizin ve css dosyalarınızın gösteriminde sorunlar oluşacaktır.

bu sorunun çözümü için <img tagındaki verilere genel olarak runat="server" ifadesi eklenir src attribute'nun başınada ~/ ifadesi eklenir

Eski Hali(Not Working): <img alt="" src="images/kirmizialt.gif" style="width: 32px; height: 6px" />
Yeni Hali(Working): <img alt="" src="~/images/kirmizialt.gif" style="width: 32px; height: 6px" runat="server" />

Bu şekilde image dosyalarındaki problemler çözümlensede bazı noktalarda örneğin bir table hücresine backgorund-image tanımladığı gibi bir durumda W3 strandartlarına uyup background-image i style attribute'u içerisinde tanımlamak isterseniz bu yöntem işe yaramayacaktır. Bunun yerine ResolveUrl fonksiyonunu kullanabiliriz.

Örneğin;

Eski hali(Not Working): <td style="background-image:url('images/kirmiziback.gif');" class="baslik_beyaz"> 

Şeklinde tanımlanan bir hücrede url nerde olursa olsun(yemektarifleri/avetleri) gibi bir dizin altında images klasörünü arayacağından doğru sonuç vermeyecektir.

Bunun yerine;

Yeni hali(Working):

<td style="background-image:url(<%= Page.ResolveUrl("~")%>images/kirmiziback.gif);" class="baslik_beyaz">

Şeklinde tanımlayarak <%= Page.ResolveUrl("~")%> kodunu image url'sinin başına getirip sorunun çözülmesini sağlayabilirsiniz. Genellikle MasterPage kullanımlarında ortaya çıkan bu durumlarda ResolveUrl methodu çok işinize yarayacaktır.

Kolay gelsin...

4 kişi tarafından 4.5 olarak değerlendirildi

  • Currently 4,5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

ASP.NET

Colourful DropDownList

by Yasin Sirkecili 9. Aralık 2008 23:50
 

Mail ile gelen bir soruya cevap olarak yazdığım üzere...
DropDownList içerisine System.Drawing.Color structındaki renk adlarını ve değerlerinin nasıl aktarılabileceğini ve ilgili renklerin itemlara nasıl verilebileceğini aşağıdaki kısa kod bloğunu kullanarak yapabilirsiniz. User Profile eylemlerinde kullanıcının kendi background rengini seçebilmesi adına güzel bi uygulama olabilir. kolay gelsin...

protected void Page_Load(object sender, EventArgs e)
{
string[] renkler = System.Enum.GetNames(typeof(System.Drawing.KnownColor));
Array degerler = System.Enum.GetValues(typeof(System.Drawing.KnownColor));


for (int i = 0; i < renkler.Length; i++)
  {
     ListItem item = new ListItem(renkler[i].ToString(),degerler.GetValue(i).ToString());
     item.Attributes[
"style"] = "background:" + renkler[i];
     DropDownList1.Items.Add(item);
  }

}

5 kişi tarafından 4.6 olarak değerlendirildi

  • Currently 4,6/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , , , ,

ASP.NET | C#

Profile Groups in Web Applications

by Yasin Sirkecili 9. Aralık 2008 15:12
ASP.NET 3.5 Web Aplikasyonlarında IDE ProfileCommon sınıfından Profile nesnesini türetmediği için ASP.NET Web Site larda olduğu gibi Profile.GroupName.PropertyName şeklinde grup içindeki özelliklere erişmeniz mümkün değildir. Bu durumu ya profile yapısı içinde bir class inherit ederek kendiniz yapılandırıp çözümleyebilirsiniz. Yada

<group name="iletisim">
<add name="ad" defaultValue="yasin" allowAnonymous="true"/>
<add name="soyad" defaultValue="sirkecili" allowAnonymous="true"/>

<
add name="telefon" defaultValue="0532XXXYYZZ" allowAnonymous="true"
/>
</
group
>

şeklindeki bir grup özelliği için

Label1.Text =
HttpContext.Current.Profile.GetProfileGroup("iletisim").GetPropertyValue("telefon");

ifadesini kullanıp erişebilirsiniz.

Not: Profile yapılandırması için daha sonra detaylı bilgi yazacağım.

5 kişi tarafından 4.6 olarak değerlendirildi

  • Currently 4,6/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

ASP.NET | C#

Validatörlerin püfleri - 1

by Yasin Sirkecili 22. Kasım 2008 20:36
  • RequiredFieldValidator

RequiredFieldValidator kontrolünün InitialValue propertysini kullanarak dropdownlist seçimlerimizde açıklama yazsını yazdığımız itemların seçilmesi durumunda validatörün tetiklenmesini sağlayabiliriz.

<asp:DropDownList ID="DropDownList1" runat="server">
   <asp:ListItem>Lütfen bir kişi seçiniz</asp:ListItem>
   <asp:ListItem>Yasin Sirkecili</asp:ListItem>
   <asp:ListItem>Levent Yıldız</asp:ListItem>
   <asp:ListItem>Mete Tunca</asp:ListItem>
   <asp:ListItem>Sem Göksu</asp:ListItem>
    </asp:DropDownList>
    <asp:Button ID="Button1" runat="server" Text="Button" />
     <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="DropDownList1" ErrorMessage="isim seçmediniz"  InitialValue="Lütfen bir kişi seçiniz"></asp:RequiredFieldValidator>

Yukarıdada gördüğünüz üzere ListItemlarımızdan 0 indexine sahip olan ve sadece açıklama nedeniyle kullandığımız itemın seçilmesi durumunda validatörün tetiklemesini sağlamak için Initial Value proprtysine itemla aynı text değeri atıyoruz. Initial Value propertysinin özelliği kendisine atanan katar ile validatörün kontrol ettiği kontrolün text değerinin aynı olmamasını sağlamaktır. Eğer iki değer aynı ise validatörün tetiklenerek uyarı mesajı vermesini sağlayacaktır.

  • CompareValidator

Çoğumuzun genellikle iki farklı kontroldeki değerlerin birbirleri ile aynı olup olmadığını denetlemek için kullandığımız CompareValidator aslında tek bir kontroldeki katarın sabitlenen bir değere eşit yada büyük yada küçük gibi kontrollerini yapmanın yanı sıra aynı zamanda girilen değerin data tipinide kontrol edebilir. Örneğin;

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
   <asp:Button ID="Button1" runat="server" Text="Button" />
   <asp:CompareValidator ID="CompareValidator1" runat="server" ControlToValidate="TextBox1" ErrorMessage="textboxa yasin yazmadınız."             ValueToCompare="yasin"></asp:CompareValidator>

şeklinde bir kontrole girilen veriyi başka bir kontrolle karşılaştırmak yerine bir değerle karşılaştırabiliyoruz. Aynı olayı CompareValidatorımızın Operator ve Type properytlerinden faydalanarak matematiksel karşılaştırmalar yapmak gibi işlemler içinde kullanabiliriz. Örneğin;

<asp:CompareValidator ID="CompareValidator1" runat="server"  ControlToValidate="TextBox1" ErrorMessage="10dan büyük bir sayı yazmadınız." Operator="GreaterThan" Type="Integer" ValueToCompare="10"></asp:CompareValidator>

Burda kullanıcıyı integer tipinde bir değer girmeye zorlamanın yanı sıra aynı zamanda 10dan büyük bir değer girmeyede mecbur bırakıyoruz.

Sadece girilen verinin tipini kontrol etmek istersek;

<asp:CompareValidator ID="CompareValidator1" runat="server"  ControlToValidate="TextBox1" ErrorMessage="lütfen tam sayı bir değer giriniz." Operator="DataTypeCheck" Type="Integer"></asp:CompareValidator>

şeklinde Operator propertysinin DataTypeCheck değerini kullanarak girilen verinin istediğimiz veri türüne olan uygunluğunuda kontrol edebiliriz. Test uygulaması yaptığınızda göreceğiniz üzere CompareValidatorün gelişmiş özellikleri birçok konuda RegularExpression ihtiyacını ortadan kaldırıyor.

Operator property'si 7 farklı değer alabilir. Bu değerler DataTypeCheck , Equal , NotEqual , GreaterThan , GreaterThanEqual , LessThan , LessThanEqual şeklinde olup bu değerlerden faydalanarak kontrol değerini karşılaştırma şeklinizi kolaylıkla belirleyebilirsiniz.

Type property'si ise 5 farklı değer alır ve bu değerler şöyledir: Currency , Date, Double, Integer, String

2 kişi tarafından 3.0 olarak değerlendirildi

  • Currently 3/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

ASP.NET

FileUpload dosya boyutu sınırı ve işlem süresi

by Yasin Sirkecili 22. Kasım 2008 20:35

FileUpload kontrolü ile kullanıcı dosyalarını sunucunuza aktarırken pekde dikkat edilmeyen ancak DOS ataklarına karşın muhakkak önlem almamız gereken bi özellikten bahsetmek istiyorum. Default olarak bir asp.net uygulamasında maximum 4 MB yani 4096kb bir talebi işleme sokabiliriz. FileUpload'a eklenen kullanıcı dosyalarının bu sınırı aşması durumunda sayfa hata verecek ve dosya transfer edilmeyecektir. Ancak bu durum sunucuda 4mb lık talepler yaratacağından ard arda yapılması bir nevi Denial of service atack haline gelecektir. Hem bu durumu engellemek. Hemde ihtiyaç duyduğunuzda daha yüksek dosya boyutuna izin vermek için aşağıdaki düğümü ve niteliklerini web.config sayfanıza eklemeniz gerekiyor.

<httpRuntime maxRequestLength="11264" executionTimeout="120"/>

burda;

maxRequestLength : kb cinsinden dosya boyutu değeri örneğin ben 11 MB olarak belirledim.
executationTimeout : Request talebinin ne kadar süre içerisinde işlem görebileceğini sn cinsinden belirtir. Süre aşıldığında talebin iptali sağlanır. Bu durumda sunucunuzun taleplere cevap verme yetisi azaldıkça işlem süresi içinde gerçekleşmeyen talepleri iptal edeceğinden aynı zamanda aplikasyonunuzun korunmasına yardımcı olacaktır.

10 kişi tarafından 4.9 olarak değerlendirildi

  • Currently 4,9/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

ASP.NET

Dinamik eklenen kontroller ve Updatepanel trigger ilişkisi

by Yasin Sirkecili 22. Kasım 2008 20:30

for (int j = 1; j <= Convert.ToInt32(toplamsayfa.Value); j++)
{
LinkButton lnkbutton = new LinkButton();
lnkbutton.Text =" " + j.ToString() + " ";
lnkbutton.Font.Overline = false;
lnkbutton.CommandArgument = j.ToString();
lnkbutton.Command += new CommandEventHandler(lnkbutton_Command);
lnkbutton.ID = "lnk" + j.ToString();
AsyncPostBackTrigger trig = new AsyncPostBackTrigger
();
trig.ControlID = lnkbutton.ClientID.ToString();
UpdatePanel2.Triggers.Add(trig);
Panel1.Controls.Add(lnkbutton);
}

yukarıda gördüğünüz son projemden, basit bir sayfalama algoritmasına ilişkin kısa bir blok. Burda dikkatinizi çekmek istediğim.

AsyncPostBackTrigger trig = new AsyncPostBackTrigger
();
trig.ControlID = lnkbutton.ClientID.ToString();
UpdatePanel2.Triggers.Add(trig);

şeklinde updatepanelinize dinamik olarak trigger ekleyebilirsiniz.

5 kişi tarafından 4.6 olarak değerlendirildi

  • Currently 4,6/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

AJAX | ASP.NET

Server-side table - tr - td

by Yasin Sirkecili 22. Kasım 2008 20:28
Az önce mail ile gelen sorulardan birine yazdığım cevabı burdada yayınlamak istedim. Bildiğiniz üzere asp.nette server-side table kullanarak dinamik olarak tablolar oluşturup verilerinizi bu tabloların hücrelerine aktarabilir ve görüntüleyebilirsiniz. Genel olarak baktığımızda veritabanı işlemleri hususunda verilerimizi datalist, detailsview, datagrid gibi kontrollere template tanımlayıp istediğimiz düzende görüntülenmesini sağlıyoruz. Ancak hem vt işlemlerinde bu kontroller olmadan kendi tablolama yapımızı oluşturarak verilerimizi görüntüleyebiliriz hemde veritabanı işlemleri haricinde de sunucu taraflı kodlarımızla arayüz görselliğine yön verebiliriz.

Örneğin;

  • Table table = new Table(); // System.Web.UI.WebControls.Table sınıfından yeni bir table nesnesi türetiyoruz
    TableRow tr = new TableRow(); // System.Web.UI.WebControls.TableRow sınıfından yeni bir tablerow nesnesi tıretiyoruz
    TableCell td1 = new TableCell();// System.Web.UI.WebControls.TableCell sınıfından yeni bir tablecell nesnesi türetiyoruz
    TableCell td2 = new TableCell();
    td1.Text =
    "yasin"; // türettiğimiz tablecell nesnesinin içerisine yasin yazıyoruz.
    td2.Text = "sirkecili";
    tr.Cells.Add(td1);
    // tablecell nesnemizi satır görevi görecek olan tablerow satırına ekliyoruz
    tr.Cells.Add(td2);
    table.Caption =
    "bu bir basliktir"; // asp.net 2.0 ile hayatımıza giren caption property si ile tablomuza başlık ekliyoruz.
    table.CaptionAlign = TableCaptionAlign.Left; // tablo başlığımızın görüntülenme şeklini System.Web.UI.WebControls.TableCaptionAlign enumaratör ile seçiyoruz. eğer hiç müdahale etmez isek standart olarak centered gelecektir.
    table.BackColor = System.Drawing.Color.Red; // table'ımıza arkaplan rengi seçiyoruz.
    table.BorderStyle = BorderStyle.Solid; // tableımızın border stilini belirliyoruz.
    table.Attributes.Add("Border", "2"); // border kalınlığını belirlemek amacıyla server-side table'ımızın html çıktısındaki attributelara müdahale ediyor ve border kalınlığını 2px olarak belirliyoruz.
    table.Rows.Add(tr); // içine daha önce hücrelerimizi eklediğimiz satırımızı tablomuza ekleyip ilişkilendiriyoruz.
    this.Controls.Add(table);// dinamik olarak hücrelerini ve satırlarını oluşturup stillerini belirlediğimiz tablomuzu görüntülenmesi amacıyla sayfamıza ekliyoruz.

    (ne açıklama yazdım ama beah Tongue out)

şeklinde aşağıdaki gibi çıktı yaratacak bi table oluşturabiliriz.

  • <table Border="2" border="0" style="background-color:Red;border-style:Solid;">
     <caption align="Left">
      bu bir basliktir
     </caption><tr>
      <td>yasin</td><td>sirkecili</td>
     </tr>
    </table>


tablomuzun görüntüsü bu şekilde olacaktır.

hepsi bu kadar...

2 kişi tarafından 5.0 olarak değerlendirildi

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

ASP.NET

Literal & Mode Enumeration

by Yasin Sirkecili 22. Kasım 2008 20:28

Pek fazla kullanmasakda Literal kontrolü gözünüze çarpmıştır. Nedir ? ne işe yarar? hiç baktınız mı ?

Literal kontrolü label kontrolü gibi text propertysine atanan değeri html çıktısına yazdırır. Label'dan 1. farkı label text propertysindeki değeri html çıktısında span tagları arasında yazdırırken literal text propertysine atanan değeri doğrudan doğruya yazdırmayı sağlar. Peki bu durum nerde ve nasıl işe yarar?

mesela html çıktısına html tagları yazarken kullanabiliriz.

Literal kontrolüne ait mode property sine System.Web.UI.WebControls.LiteralMode enumaratörüne ait enum değişkenlerinden yaptığınız seçime göre kontrolün davranış nitelikleri değişecektir.

örneğin;

  • Label1.Text = "<YSN>yasin sirkecili</YSN>";
    Literal1.Mode = LiteralMode
    .PassThrough;
    Literal1.Text = "<YSN>yasin sirkecili</YSN>"
    ;
    Literal2.Mode = LiteralMode
    .Encode;
    Literal2.Text = "<YSN>yasin sirkecili</YSN>"
    ;
    Literal3.Mode = LiteralMode
    .Transform;
    Literal3.Text = "<YSN>yasin sirkecili</YSN>";

PassThrough: Text propertysine atanan değerin modifiye olmadan görüntülenmesini sağlar.
Encode: Text propertysine atanan değeri html-encoded haline getirerek tag işaretlerinin encoded karakterlere dönüşmesini sağlar.
Transform: Text propertysine atanan değer içerisinde browser tarafından yorumlanamayan tagların süzülerek gösterilmesini sağlar. Ancak günümüzde kullandığımız tüm tarayıcıların xhtml desteklediğini düşünürsek, Çıktının PassThrough modundan bir farkı olmayacaktır. Çünkü xhtml varolmayan tagların görüntülenmesine sebep olacaktır.

yukarıdaki kod blogunu çalıştırdığımızda alacağımız örnek çıktı aşağıdaki gibi olacaktır.

  •         Label:
            <span id="Label1"><YSN>yasin sirkecili</YSN></span>
            <br />
           
            Literal (PassThrough Mode):
            <YSN>yasin sirkecili</YSN>

            <br />

            Literal (Encode Mode):
            &lt;YSN&gt;yasin sirkecili&lt;/YSN&gt;

            <br />
           
            Literal (Transform mode):
            <YSN>yasin sirkecili</YSN>



3 kişi tarafından 5.0 olarak değerlendirildi

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

ASP.NET

Substitution ile yüksek performans ve Asenkron Caching

by Yasin Sirkecili 22. Kasım 2008 20:26

Asp.net uygulamalarında projelerimizi hızlandırmak için birçoğumuz caching yapısını kullanmışızdır. Ancak sayfaya belli bir süre için caching uyguladığımızda sayfanın tamamı cache bellekte saklanarak belirtilen zaman geçmediği müddetçe yenilenen verileri görmemiz mümkün olmuyordu. Bu sorunu önbelleğe alınan sayfanın dinamik noktalarını caching yapısından ayrı tutmamızı sağlayan substitution kontrolü kendisine gönderdiğimiz html çıktıları ile caching alanından bağımsız olarak dinamik yapısını kullanabilmektedir.

Konuyu bir örnek üzerinde açıklayacak olursak;

substitution.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="substitution.aspx.cs" Inherits="substitution" %>
<%@ OutputCache Duration="15" VaryByParam="none" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="Label" ></asp:Label>
<br />
<asp:Substitution ID="Substitution1" runat="server" MethodName="SubFonk" />
</div>
</form>
</body>
</html>

 sayfamızda 15sn boyunca caching uygulaması yapacağımızı belirterek. 15sn boyunca sayfanın içeriğinin güncellenmemesini sağlayabiliriz. Ancak burda Substitution kontrolünün methodname propertysinden faydalanarak sayfa üzerinde dinamik bir alan tanımlayıp bu alanı güncelleyecek bir fonksiyon tanımlayabiliyoruz.

substitution.aspx.cs

public partial class substitution : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = DateTime.Now.ToString();
}
public static string SubFonk(HttpContext icerik)
{
return "Anlık Zaman: " + DateTime.Now.ToString();
}
}

Burada Page_Load eventine yerleştirdiğimiz kod ile sayfaya zamanı yazdırıyoruz. Ancak bu zaman ne kadar postback yaparsak yapalım cache duration süresi boyunca güncellenmeyecektir. Bu nedenle sayfa üzerinde 15sn geçmesini beklemeden güncellenecek bir alana ihtiyacımız olabilir. Bu durumda sayfa üzerine eklediğimiz ve SubFonk fonksiyonundan etkilenmesini istediğimiz Substitution1 kontrolümüz ile yine zamanı string formatında return ediyoruz. Böylelikle sayfanın 15sn lik zaman dilimindeki postbacklerinde Label1 in text propertysinin etkilenmeyeceğini ancak Substitution1 kontrolünün içeriğine string formatında gönderdiğimiz html içeriğinin güncellendiğini gözlemleyebiliriz.

Burada dikkat etmemiz gereken 2 husus vardır. 1. si Substitution kontrolü html çıktısını alacağından bu kontrolün methodname propertysine atadığımız fonksiyonun geriye string türünde veri göndermesi gerekmektedir. Bununla beraber 2. hususta yine bu fonksiyonun static olarak tanımlanması gerektiğidir. Bunun nedeni sayfa her postback olduğunda sunucu tarafında yeniden üretilmesidir. Static tanımlı methodlar bellekte static bölgesinde tutulduğundan yeniden üretilmeden çalışacaktır. Böylelikle caching mekanizmasına aykırı davranmamış olacaktır.

2 kişi tarafından 2.5 olarak değerlendirildi

  • Currently 2,5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

ASP.NET

SMTP Authentication ve System.Net.Mail Class

by Yasin Sirkecili 22. Kasım 2008 20:26

SMTP Authentication gerektirmeyen mail serverlarda çoğumuz smtp authentication bilgisi yazmadan maillerimizi gönderiyoruz Tabiki bu yöntemin kullanıldığı sunucular genel olarak spam mail göndermeye uygun diyebiliriz. Standart olarak birçoğumuz smtp serverımızı mail.alanadi.com şeklinde tanımladığımızdan eğer SMTP Authentication gerektirmeden mail gönderilmesine olanak sağlarsak herkesin bizim serverımız üzerinden mail göndermesi mümkün hale gelir. Bu bir güvenlik açığımıdır sorusuna evet diyebilirim çünkü milyonlarca mail gönderen toplu mail gönderme programları mevcut. Peki SMTP Authentication gerektiren sunucularda nasıl mail göndeririz ona değinelim.

ilk olarak işimizi kısayoldan halletmek için web.config dosyamıza system.net nodeunun altındaki mailSettings nodeunda gerekli ayarlarımızı yapalım.

<system.net>
<
mailSettings
>
<
smtp from="info@alanadi.com"
>
<
network port="25" host="mail.alanadi.com" userName="info@alanadi.com" password="sifrem" defaultCredentials="true"
/>
</
smtp
>
</
mailSettings
>
</
system.net>

bu aşamadan sonra kodlarımıza bakalım.

SmtpClient smtpserver = new SmtpClient();
MailAddress mSender = new MailAddress("info@alanadi.com"
);
MailAddress mTo = new MailAddress("to@alanadi.com"
);
MailMessage newMail = new MailMessage
(mSender, mTo);
smtpserver.Send(newMail);

gördüğünüz gibi bu aşamadan sonra info@alanadi.com adresi ile gönderdiğimiz tüm maillerde mailSettings nodeunda belirttiğimiz SMTP Authentication bilgileri geçerli olacaktır.

Peki ya Web.Config kullanmadan nasıl çözerim bu işi derseniz.

SmtpClient smtpserver = new SmtpClient();
MailAddress mSender = new MailAddress("info@alanadi.com");
MailAddress mTo = new MailAddress("to@alanadi.com");
MailMessage newMail = new MailMessage(mSender, mTo);
System.Net.
NetworkCredential auth = new System.Net.NetworkCredential("info@alanadi.com", "sifrem");
smtpserver.UseDefaultCredentials =
false;
smtpserver.Credentials = auth;
smtpserver.Send(newMail);

yönetiminide kullanabilirsiniz.

3 kişi tarafından 5.0 olarak değerlendirildi

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

ASP.NET

Yüklenme safhasındaki Erişilebilir ve kontrol edilebilir sayfa olayları

by Yasin Sirkecili 22. Kasım 2008 20:25

Sayfanın taryıcıya gönderilmesi anına kadar kontrol edilebilir sayfa olaylarına genel olarak bakacak olursak PreInit, Init, InitComplete, PreLoad, Load, PreRender, PreRenderComplete, Unload olaylarını görürüz... Bu olayları kısaca açıklayayim...

PreInit: Sayfanın kullanıma hazırlanmasındaki ilk olaydır.
Init: Sayfanın kullanıma hazırlandığı safhadır. Ön yükleme diye adlandırabiliriz. Kontroller yüklenmeye başlar. Dinamik olarak kontrol ekleyecekseniz en uygun safhadır ki Belleğe ikinci işlemi yaptırmadan daha yüksek perdormans kullanabilesiniz.
InitComplete: Kontroller yüklenmesi tamamlanmıştır. Artık Load eventinde kontrollere erişebilir ve işlem yapabilirsiniz.
PreLoad: Sayfa belleğe yüklenmeye başlamak için hazırlanır.
Load: Sayfa belleğe yüklenir.
LoadComplete: Sayfanın belleğe yüklenmesi tamamlanır.
PreRender: Konroller bellekten tarayıcı için oluşturulmaya başlar.
PreRenderComplete: Sayfanın tarayıcıya gitmesi için hazır olduğu andır. Aynı zamanda viewstate bilgileride bu anda yüklenmiştir.
Unload: Sayfa bellekten silinir. Tüm kontroller bellekten kaldırılır.

Şimdi bu olayların yönetilmesine bakalım.

Page directive'inde default olarak tanımlı gelen AutoEventWireUp="true" attribute'u sayfanızda code-behind olarak eventlara ait protected methodları manuel olarak yazıp kullanmanıza olanak tanır. Sayfa yüklenirken burda belirttiğim 9 olaya ait methodları arar ve varolanların içindeki kodları gerçekleştirir. AutoEventWireUp attribute'u size event yaratmadan manuel olarak sadece olaylara ait methodları ve parametrelerini belirtip kullanmanızı sağlar.

Örneğin AutoEventWireUp="true" olduğu durumda code-behind sayfanıza

protected void Page_LoadComplete(object sender, EventArgs e) {
 //
}

methodunu ekleyip kullanabilirsiniz ancak false olduğu durumda öncelikle partital class ait bir constructor tanımlayarak classın çağırıldığı anda istediğiniz event'ların yaratılmasını sağlamanız gerekir. Örnekleyecek olursak

public deneme() {
Page.LoadComplete += new EventHandler(Page_LoadComplete);
}

deneme class ı için bir constructor tanımlayarak önce eventi belirtelim daha sonra...

protected void Page_LoadComplete(object sender, EventArgs e) {
 //
}


böylelikle artık sayfanın yüklenme safhasındaki olaylara müdahale edebiliriz. Bunların haricinde birkaç Page Event daha mevcut tabikide örneğin transactionları yönetmek, databinding anını gözlemlemek gibi... onlarıda başka bir yazıya artık...

 

1 kişi tarafından 5.0 olarak değerlendirildi

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

ASP.NET

ASP.NET 2.0'da CodeSubDirectories kullanarak birden fazla dil ile entegre çalışabilmek

by Yasin Sirkecili 22. Kasım 2008 20:24

ASP.NET klasörülerinden biri olan ve dinamik derlemeye tabi olan App_Code klasörünü birçoğumuz projelerimizde yazdığımız classlar için kullanmışızdır. Ancak zaman zaman Ortak çalışma, Hazır algoritmalar gibi gereksinimlerden dolayı kullandığımız dilden başka bir dildeki classları kullanmak zorunda kalmamız gerekir. (Basicci Proje arkadaşlarına saygı duymak :) )  Bu noktada asp.net 2.0 projelerinde birden fazla dil ile çalışabilirsiniz. Ancak App_Code klasörüne eklediğiniz classlar tek bir assembly olarak derleneceğinden debuggerın ayrım yapması gerekmektedir. Bu nedenle asp.net projenize App_Code altına 2 farklı dil için iki ayrı klasör ekleyip isimlerini csharp ve vbasic olarak belirleyin. Daha sonra web.config de compilation tagı altındaki codeSubDirectories tagını kullanarak farklı dillerdeki kodlarınızın uzantısına göre derlenmesini sağlayabilirsiniz. Böylelikle birden fazla dil ile entegre çalışabilirsiniz.

<compilation debug="true">
    <codeSubDirectories>
        <
add directoryName="csharp"/>
        <
add directoryName="vbasic"/>
    </
codeSubDirectories>
vs.. vs..
</compilation>

2 kişi tarafından 5.0 olarak değerlendirildi

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

ASP.NET

MaintainScrollPositionOnPostback - ile kaldığın yerden devam

by Yasin Sirkecili 22. Kasım 2008 20:22

Postback olaylarında dikkatinizi çekmiştir. Sayfa yenilendikten sonra sayfa durumu scroolbar ile nerede olduğunuza bakmaksınız browser içinde Anchor Point: Top Left için 0,0 lokasyonuna gelir. Page directive'ine ekleyeceğiniz MaintainScrollPositionOnPostback ile kaldığınız yerden devam etmeyi sağlayabilirsiniz.

Böylelikle toplu veri eklemeleri yapılırken, girişi yapan elemanı en büyük derdinden kurtarabilirsiniz.

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" MaintainScrollPositionOnPostback="true" %>

2 kişi tarafından 5.0 olarak değerlendirildi

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

ASP.NET

Powered by BlogEngine.NET 1.4.5.0
Theme by Mads Kristensen

Yasin Sirkecili


Yasin Sirkecili
Software Developer
MSN & Mail: yasin@sirkecili.com

Bağlantılar

Calendar

<<  Şubat 2012  >>
PaSaÇaPeCuCuPa
303112345
6789101112
13141516171819
20212223242526
2728291234
567891011

View posts in large calendar

Son Yorumlar

Bağlantılar 2