ASP.NET-AJAX etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
ASP.NET-AJAX etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

Asp.NET GridView CommandField için OnClientClick Methodu

27 Haziran 2012


CommandName'lerinden yakaladığımız ImageButton'lara OnClientClick property sini kullanarak mesaj verdirme işlemi aşağıdaki gibi sonuçlanmakta.











SqlDataSource: Getting @@Identity after Insert

14 Temmuz 2011

Yesterday I was developing a simple form using a SqlDataSource to INSERT or UPDATE when saving the form. The form consisted of a few controls and a button. In the case of a new item, on clicking the save button I am executing SqlDataSource1.Insert(). For an existing item, I’m using an “ID” parameter on the query string which in turn is used by the UPDATE command. So I need the ID of the row I’ve just inserted to allow the user to update the form. I should mention my table has a column called “ID” of type int which is specified as the auto-incrementing identity column.

I put together the form in less than 30 minutes and then spent twice that time trying to find the solution you are reading now. I was sorely tempted to ditch the DataSource as this is straightforward when you’re executing your SQL commands directly in the code-behind. But I was curious and persevered until I found the answer:

Firstly, let me describe how to set up the DataSource to do the insert. The InsertCommandType is “Text”. For the InsertQuery click the button to open the Command and Parameter dialog. Use the query builder, if you like, to create your insert statement. After the insert statement append “SET @Identity = @@Identity;” so our insert command looks something like this:

INSERT INTO TestTable (TestCol) VALUES (@TestValue); SET @Identity = @@Identity;

The statement above has 2 parameters. One is TestValue we’re setting in to TestCol. The other is Identity which will be the ID of the column we insert. Click Add Parameter and type “TestValue”, Parameter source is control, and ControlID is a textbox. Add another parameter called “Identity”. This time click Show Advanced Properties, set Direction to “Output” and Type to “int” (leaving Parameter source as “None”).

Now the trick is catching the DataSource at the right time so that our output parameter will have a value. Don’t mistake the DataSource.InputParameters as the place to look as this merely describes the parameters we’ve configured above. To actually see the parameters after execution you need to catch the OnInsertedevent. Here we have SqlDataSourceStatusEventArgs which contains the command and its parameters after the command has executed.

protected void SqlDataSource1_Inserted(object sender, SqlDataSourceStatusEventArgs e)

{

//Read the value of the @Identity OUTPUT parameter

string sID = e.Command.Parameters["@Identity"].Value.ToString();

//Display new ID

Label1.Text = sID;

}

So with the ID known I can now redirect the user to "page.aspx?ID=" + sID such that they may update the form.


Alıntıdır...

DataList içindeki DropDownList’in Value’sunu SelectedIndexChange'de alma

28 Nisan 2009


Senaryoda bir DataList'imiz olsun. O DataList'in içinde de DropDownList'imiz olsun. DropDownList'in SelectedValue'sunu yakalamak için aşağıdaki kodu yamamız yeterli olur.

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
DropDownList ddl = sender as DropDownList
string deger = ddl.Items[ddl.SelectedIndex].Value; 
}


DropDownList ve Validation Conrol

27 Nisan 2009


DropDownList
'imizde bir alanın muhakkak seçilmesini ve seçilmediği taktirde uyarı vermesini istemiyorsak, DropDownList'in  "
Initial Value" özelliğinden faydalanabiliriz. 




Zaman zaman bilgilendirmek ve dikkati çekmek için DropDownList'lere "Seçiniz.." vs gibi ibareler ekleriz. Seçili bir alan olmadığı taktirde uyarı göstermesini istiyorsak, bir  RequiredFieldValidator ekleyelim, "Control to validate" özelliğine de muhakkak şeçili geçerli bir alanın olmasını istideğiniz DropDownList'i bağlayalım. Initial Value suna "Seçiniz.." itemının value sunu yazalım.

Bunu yapmakla, "Seçiniz.." dışında bir item seçilmediği taktirde uyarı gözükmesini sağlayabiliriz.

İyi Çalışmalar.


ContentPage'den MasterPage'deki Kontrole Ulaşma

10 Nisan 2009

ContentPage'den MasterPage'deki kontrole ulaşmak için ContenPage'in kodunda ulaşmak 

istediğiniz kontrolden üretmelisiniz.

mesela;
MasterPage'imde pnlEgitim adında bir Panel'im var, ContentPage de bunu görünmez  
yapmak istiyorum.
Panel pnl = (Panel)this.Master.FindControl("pnlEgitim");
pnl.Visible=False;

Aynı mantıkla başka bir örnek olarak da MasterPage'deki bir UserControl'u 
görünmez yapalım

UserControl uc = (UserControl)this.Master.FindControl("Egitimler1");  
uc.Visible = false;

İyi Çalışmalar.


RowCommand Kullanımına Örnek

07 Nisan 2009

Gridview'in Row'undan "Detay" LinkButton'una tıklandığında o satıra dair bazı değerlere ulaşmak istiyoruz.


Bunun için yapacağımız işlemlerden biri; öncelikli olarak Gridview'e bir TemplateField eklemek;



Burda önemli olan CommanName değreinin detay olarak belirlenmiş olması. Kod kısmında ise şöyle bir işlem yapacağız;


Eklediğimiz LinkButton'da CommandArgument'i db'den pID değeri olarak alınmasını istemiştik. Bu değere seciliKisiID ile ulaşabiliyoruz. Seçili Row'a da row değerini elde ettiğimiz gibi ulaşabiliriz.

CommandName işlevine gelince tıklanılan LinkButton'un CommandName'i detaysa işlem yaptırdık. Bir satırda birden fazla LinkButton olabilir ve her birinin CommandName i farklı olabilir, Mesela CommandName'i sil ise silme işlemi, guncelle ise güncelleme işelmi de yaptırabilirsiniz. Bunun için Bu CommandNamelere sahip LinkButtonları Gridviewinize eklemelisiniz.

İyi çalışmalar...


Mars Kullanımı

03 Kasım 2008

ConnectionString katarı içerisinde MultipleActiveResultSets=true kullanılmaması halinde, MARS etkisi görülmemektedir. Varsayılan olarak MultipleActiveResultSets özelliğinin değeri false’ dur. MARS tekniği, MultipleActiveResultSets değeri açıkça true’ ya set edildiği takdirde çalışmaktadır.

örnek:

bu örnekte web.config dosyasının içine eklendi

<connectionstrings>

<add name="CnnStr" connectionstring="Data Source=.;Initial Catalog=DenemeDB;User ID=sa;Password=123456;MultipleActiveResultSets=true" providername="System.Data.SqlClient">

connectionstrings>

Regular Expression Kullanımı

30 Ekim 2008

Emrah Çetiner beyefendinin bloğundan alıntıdır.
4 Eylül 2008, Perşembe, 08:52

.
Herhangi bir karakteri temsil eder.
d.rk > dark, dork, ...
p..l > pool, paul, ...

*
Kendinden önce gelen karakterin, hiç olmayacağını veya bir çok kez olabilceğini temsil eder.
go*gle > ggle, gogle, google, gooooogle, ...
mo.* > mo, more, mobil, ...
mobil(phone)* > mobil, mobilphone, mobilphonephone, ...

+
*'dan farkı kendin önce gelen karakterin en az bir defa olması gerektiğidir. Birden fazla da olabilir.
go*gle > gogle, google, gooooogle, ...
mobil(phone)* > mobilphone, mobilphonephone, ...

?
Kendinden önce gelen karakterin, hiç olmayacağını veya bir kez olabileceğini temsil eder.
go?gle > ggle, gogle
mobil(phone)? > mobil, mobilphone

()
Gruplama yapmamızı sağlar.
(mobilphone) > mobil, phone

[]
Dizi veya aralığı temsil eder.
d[ao]rk > dark, dork
d[ao]+rk > daark, dooork
mobil[A-Z] > mobilA, mobilB, mobilC, ...

[^]
"^" simgesinin [] içersinde kullanılması, kendisinden sonraki karakterlerin kullanılmaması gerektiği anlamına gelir.
b[^aeiou].* > break, blog

{}
Kendinden önce gelen karakterin tekrar edilme miktarını temsil eder. İçersinde tek değer yazılırsa zorunlu, virgülle ayrılmış çift değer yazılırsa min. max. aralık belirtir.
go{2}gle > google
go{2,5}gle > google, gooogle, goooogle, gooooogle
[A-Z]{3} > ABC, DEF, AEF, GGG, HRF,...
[a-z]{2,} > AB, DE, ABF, DEFRT, FFGERTGV,...
[0-9]{3-5} > 165, 789, 1966, 7786, 77788, 98765

\
Kendinden sonra gelen özel karakterin kullanılabilmesini sağlar.
google? > googl, google
google\? > google?

(?#comment) > açıklama yazmak için
^ > Satır başı
$ > Satır sonu

\d > Herhangi bir rakam [0-9]
\D > Herhangi bir rakam olmayan [^0-9]
\w > Herhangi bir harf, rakam veya alt çizgi [a-zA-Z0-9_]
\w > Herhangi bir harf, rakam veya alt çizgi olmayan [^a-zA-Z0-9_]


Kendimiz yazmaktansa, hali hazırda, çok kullanılan bazı regex'leri regexlib.com dan da bulabiliriz.

DataList de QueryString ile Alfabetik Sayfalama

18 Aralık 2007


Bu makalemizde DataList kontrolünde alfabetik sayfalama yapacağız. Gridview da wizardlarla verileri çektiğimiz zaman bize sayfalama özelliğinide sağlıyor fakat datalistte verileri wizardlarla bile çeksek bize sayfalama özelliğini kendisi vermiyor. Bazen verileri göstermek için datalist kontrolünü kullanmamız gerekebilir, ve bu durumda bir sayfada ya 1000 tane kaydı bir anda göstereceğiz ki bu hiç tavsiye edilmez yada alfabetik veya numeric olarak sayfalamak için kodlarımızı kendimiz yazacağız.

Biz bu makalemizde alfabetik sayfalama yapacağız. Bunun için alfabetik linklerimizi oluşturacağız ve linke tıklandığında seçilen harfle başlayan kayıtları getirebilecek metodumuzu yazacağız.
İlk olarak DataListin içini doldurmak için metodumuzu yazıyoruz.




Kayıtlarımızın datalist kontrolünde görünmesi için html kodlarımızı da yazıyoruz.



Seçilen harfle başlayan kayıtların getirilmesi için çağrılacak metod.




Datalist in footer template kısmına harfleri seçebilmek için alfabetik linklerimizi oluşturuyoruz.



Link olarak hyperlink kontrolünü kullanacağız, ve hangi harfi seçerse o harfi yine aynı sayfaya querystring le gönderiyoruz.



Sayfamız ilk çalıştırıldığında bütün kayıtları listeliyoruz.
Eğer linke tıklanılıp çağrılmışsa zaten seçilen harfi querystringle gönderip metotta parametre olarak alıyoruz.



Şimdi herhangi bir harfi seçelim.



Böylelikle bir makalemizin daha sonuna geldik. Bir başka makalemizde görüşmek dileğiyle.

Alıntıdır - Yazar: Veysi Sala

SQL Injection - Injection Flaws

Injection Flaws

Dinamik SQL sorgularının kullanıldığı sistemlerde oluşabilecek bir açıktır.

Bir kullanıcı adı parola sınaması yapılan SQL cümleciğinde kullanılabilir.

Select MemberID
From Member
Where Username = '"
+ txtUsername.Text + "' and Password = '" + txtPassword.Text + "'"

Şeklinde bir SQL cümlesinin kullanıldığı bir sistemde aşağıdaki ifadeleri girelim

txtUsername.Text : ' or 1=1 --
txtPassword.Text : 123

ifadesi aşağıdaki SQL cümlesinin çalıştırılmasını sağlar

Select MemberID
From Member
Where Username = ' ' or 1=1
-- ' and Password = '" + txtPassword.Text + "'"
-- ifadesi SQL Server için yorum satırı anlamına geldi için çalıştırılmaz.

Where ifadesini inceleyelim :

Username = ' ' false döner, 1 = 1 ise true. Or karşılaştırmasında ise False or True’nun sonucu true’dur. Dolayısıyla doğru kullanıcı adı parola girilmese dahi geriye tüm kayıtlar döner ve saldırgan ilk kaydın yetkisi ile içeriye giriş yapmış olur.

Saldırgan “SQL Injection” yöntemi ile veritabanı hakkında daha detaylı bilgi edinebilir. SQL Server üzerinde System Administrator hesabı açabilir, Tüm Tabloların listesini ve bu tabolardaki bilgilere ulaşabilir. Hatta web uygulaması sa yetkisine sahip bir kullanıcı ile çalıştırılıyorsa xp_cmdshell ‘format C:’ ile sisteme format bile atabilir.


Dinamik SQL sorgularındaki bu içeri sızmaları engellemenin yolu parametre kullanmaktır.

Bunu SqlCommand nesnesine SqlParameter tipinde parametre ekleyerek yapabiliriz.

SqlConnection conn = new SqlConnection();
conn.ConnectionString = "[ ConnectionString ]";
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = " Select MemberID"
+ " From Member"
+ " Where Username = @username and Password = @password";
cmd.Parameters.AddWithValue("@username",txtUsername.Text);
cmd.Parameters.AddWithValue ("@password",txtPassword.Text);
conn.Open();
int MembetID = Convert.ToInst32(cmd.ExecuteScalar());
conn.Close();

Bu şekilde kullandığımız dinamik SQL sorgularında Injection yönetimini bertaraf etmiş oluruz.



Kaynaklar

http://www.owasp.org/index.php/Top_10_2007-A2
http://www.spidynamics.com/papers/SQLInjectionWhitePaper.pdf
http://www.mutasyon.net/makaleoku.asp?id=728

Kötü Niyetli Dosya Çalıştırma

Kötü Niyetli Dosya Çalıştırma


Web uygulamanıza FileUpload ile dosya yüklemesi yapmak durumunda iseniz gelen dosyanın türünü mutlaka denetlemek gerekir. Örneğin bir Forum uygulaması yaptınız ve kullanıcılar kendi resimlerini resimler klasörüne upload edebilmekteler. Saldırgan hazırlamış olduğu bir asp sayfasını resimler klasörüne upload eder ve www.siteniz.com/resimler/foo.asp şeklinde tam yolu yazarak dışardan göndermiş olduğu bir dosyayı sisteminizde çalıştırabilir.


Bu şekilde sisteminizin izin verdiği ölçüde yeni dosyalar oluşturabilir. Örneğin anadizinde ki default.aspx dosyasını silip yerine bir default.asp dosyası oluşturabilir. Böylece siteniz açıldığında “hacked by hacker ana” yazısı ile karşılaşabilirsiniz.


Böyle üzücü durumların yaşanmaması için sisteminize upload edilen dosyaların türünü denetlemek gerek.


Bunun için System.IO.Path ve System.Text.Regex namespacelerinden yararlanacağız.

Önce upload edilen dosyasın uzantısı nı alacağız ve kabul ettiğimiz dosya türleri içerisinde olup olmadığını denetleyeceğiz.

string uzanti = System.IO.Path.GetExtension(FileUpload1.PostedFile.FileName);
System.IO.Path.GetExtension metodu uzntıyı bize “.jpg” gibi noktalı bir şekilde verir.


Kullanıcı tarafından gönderilen dosya ismi büyük harfler ile yazılmış olabilir. Buda birazdan yapacağımız karşılaştırmada farklıymış gibi algılanmasına sebep olur. Bu yüzden uzantı harflerini küçültelim.

uzanti = uzanti.ToLower();

Kabul edeceğimiz dosya uzantıları için teker teker if kontrolü yazmamak için Regular Expression ifadelerinden yararlacağız.


using System.Text.RegularExpressions;
.....
if(Regex.IsMatch(uzanti,".jpg.jpeg.gif.png.bmp") == false)
{
// gönderilen dosya formatı uygun değil
}
else
{
// gönderilen dosya formatı uygun.
}


Önemli bir konu. Umarım faydalı olmuştur.


Kaynak

http://www.owasp.org/index.php/Top_10_2007-A3

Hacking The Code - Asp.net web application Security

14 Ekim 2007


Syngress Publishing, Inc., the author(s), and any person or firm involved in the writing, editing, or production (collectively Makers) of this book (the Work) do not guarantee or warrant the results to be obtained from the Work.There is no guarantee of any kind, expressed or implied, regarding the Work or its contents. The Work is sold AS IS and WITHOUT WARRANTY. You may have other legal rights, which vary from state to state.


In no event will Makers be liable to you for damages, including any loss of profits, lost savings, or other incidental or consequential damages arising out from the Work or its contents. Because some states do not allow the exclusion or limitation of liability for consequential or incidental damages, the above limitation may not apply to you.

Table of Contents

  • Hacking the Code?ASP.NET Web Application Security
  • Chapter 1 - Managing Users
  • Chapter 2 - Authenticating and Authorizing Users
  • Chapter 3 - Managing Sessions
  • Chapter 4 - Encrypting Private Data
  • Chapter 5 - Filtering User Input
  • Chapter 6 - Accessing Data
  • Chapter 7 - Developing Secure ASP.NET Applications
  • Chapter 8 - Securing XML
  • Appendix A - Understanding .NET Security
  • Appendix B - Glossary of Web Application Security Threats

TYPE : CHM
LANG : English
PAGE : 500

Download 5 MB

Professional AJAX

13 Ekim 2007


DataRepeater ile Şablon Oluşturmak

03 Ekim 2007

“DataRepeater”, yinelenen verileri HTML biçiminde sunmak için kullanılan kontroldür. DataRepeater kontrolü içerik yerleşimi ile ilgili sunduğu templateler ile datalarımızı istediğimiz formatta görüntülememize yardım eder.

DataRepeaterın içerdiği teplateler:

  • ItemTemplate : Tekrarlanan herbir verinizin görüneceği şablonu oluşturmanızı sağlar. DataReader ın içinde bulundurmamız zorunlu olan tek “template” dir.

  • AlternatingItemTemplate : Alternatif satır şablonu anlmına gelmektedir. Ardarda görüntülenen her bir verinin okunurluk açısından birbirinden ayrılması için farklı renk ve biçim oluşturmamızı sağlar.

  • HeaderTemplate : ItemTeplate in üstünde bir başlık görünümü oluşturmanızı sağlar. Olması zorunlu değildir.

  • FooterTemplate : ItemTemplate ten sonra bitiş mahiyetinde bir şablon oluşturmanızı sağlar. Olması zorunlu değildir.

  • SeperatorTemplate : Herbir verinin arasında ayıraç olarak kullanabileceğiniz bir şablonu oluşturmanızı sağlar. Olması zorunlu değildir.

DataRepeater tepmlatelerini kullanarak yaptığım bir örnek;


Örneğin kodları;

İnternet Teknolojilerinin Dünü, Bugünü ve Yarını

01 Eylül 2007

CETURK, Eylül ayında da yine bir seminer gerçekleştiriyor. Katılımın ücretsiz olduğu seminer, 08 Eylül 2007 Cumartesi günü 14:00-16:00 saatleri arasında Microsoft Türkiye İstanbul ofisinde gerçekleştirilecektir.

Konuşmacı : Ali Rıza Babaoğlan
Seminer Yeri :Microsoft Türkiye İstanbul Ofisi
Kayıt olmak için : TIKLAYINIZ


ETKİNLİK İÇERİĞİ

Web 1.0 Ne İdi?
Web 2.0 Neler Sundu?
Web 3.0 Neler Sunacak?


KONUŞMACI
Byte Türkiye'de İnternet Editörü olarak çalışmakta olan Ali Rıza Babaoğlan, web tabanlı teknolojileri ve web tabanlı uygulama geliştirme alanında çalışmalarını sürdürmektedir. Ali Rıza Babaoğlan hakkında daha detaylı bilgiye http://www.alibabaoglan.com/ adresinden erişebilirsiniz.


ETKİNLİK SPONSORLARI








ETKİNLİK HEDİYEMİZ
Seminere katılan 3 üyemize çekilişle aşağıdaki kitaplardan hediye edilecektir. :

ASP.NET AJAX Semineri

27 Ağustos 2007


MSAkademik.net Editörü Uğur UMUTLUOĞLU tarafından 29 Ağustos Çarşamba günü İstanbul'da gerçekleştirilecek ASP.NET AJAX seminerine davetlisiniz.

Microsoft Akademik Yazılım Geliştiricileri Grubu ve nedirTV?com'un birlikte düzenleyeceği bu etkinliğe davetlisiniz. Seminer ile ilgili ayrıntılar aşağıdadır.

Not: Seminere katılım ücretsizdir.

ASP.NET AJAX SemineriAjanda

- AJAX: Asenkron JavaScript & XML
- ASP.NET AJAX- ASP.NET AJAX Mimarisi
- Visual Studio 2005'te ASP.NET AJAX Web Uygulamaları Geliştirmek
- ASP.NET AJAX Sunucu Kontrolleri
- Örnek Uygulamalar

Kontenjan: 40 kişi
Tarih: 29 Ağustos 2007 Çarşamba
Saat: 15.00 - 17.00
Adres: Netron Bakırköy Şubesi, İstasyon Cad. No:4 Bakırköy - İstanbul

Kayıt işlemi için buraya tıklayınız.