﻿
{"id":823,"date":"2012-07-08T22:11:12","date_gmt":"2012-07-08T22:11:12","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=823"},"modified":"2012-07-08T22:12:25","modified_gmt":"2012-07-08T22:12:25","slug":"ajax-autocompleteextender-kontrolu-ile-google-suggest-yapisi","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/ajax-autocompleteextender-kontrolu-ile-google-suggest-yapisi\/","title":{"rendered":"Ajax AutoCompleteExtender Kontrol\u00fc \u0130le Google Suggest Yap\u0131s\u0131"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Google Suggest yap\u0131s\u0131, Google aramalar\u0131nda bizlere kolayl\u0131k sa\u011flayan, arad\u0131\u011f\u0131m\u0131z de\u011ferlerle ilgili alternatifleri sunan bir yap\u0131d\u0131r.Tabi \u00f6rnek olarak a\u00e7\u0131klaman\u0131n l\u00fczmu olmasada prensib gere\u011fi mant\u0131\u011f\u0131n\u0131 yaz\u0131l\u0131 olarak anlatmak boynumuzun borcu.Arama kutusuna &#8220;Ank&#8221; de\u011ferlerini girerseniz e\u011fer &#8220;Ankara&#8221;,&#8221;Ankara \u00dcniversitesi&#8221; .. vs. gibi de\u011ferlerin listelendi\u011fi a\u015fa\u011f\u0131daki resimdeki gibi bir kutucuk \u00e7\u0131kmaktad\u0131r.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/07\/Google.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-824\" title=\"Google Suggest\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/07\/Google.png\" alt=\"\" width=\"348\" height=\"145\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/07\/Google.png 348w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/07\/Google-300x124.png 300w\" sizes=\"auto, (max-width: 348px) 100vw, 348px\" \/><\/a><br \/>\n\u0130\u015fte Suggest yap\u0131s\u0131n\u0131n k\u0131sa ve \u00f6z anlat\u0131m\u0131 budur.Google Suggest yap\u0131s\u0131 hakk\u0131nda daha \u00e7ok bilgi almak istiyorsan\u0131z <a href=\"http:\/\/support.google.com\/websearch\/bin\/answer.py?hl=tr&amp;answer=106230\">buray\u0131<\/a> okuman\u0131z\u0131 tavsiye ederim.<br \/>\nBen bu yaz\u0131mda Ajax kontrollerinden bu i\u015flevi ger\u00e7ekle\u015ftirebilen AutoCompleteExtender kontrol\u00fcn\u00fc sizlere tan\u0131taca\u011f\u0131m.<br \/>\n<!--more--><br \/>\nAutoCompleteExtender\u00a0kontrol\u00fc, belirtilen TextBox nesnesi i\u00e7ine yaz\u0131lan de\u011ferleri tamamlay\u0131p bizlere kutucuk \u015feklinde geri d\u00f6nd\u00fcren bir kontrold\u00fcr.Tabi bu de\u011ferleri neye g\u00f6re tamamlamaktad\u0131r? diye sorarsan\u0131z e\u011fer, kaynak olarak ne kullan\u0131yorsak e\u011fer(koleksiyon, database vs..), yaz\u0131lan de\u011ferleri kaynaktakilerle belirli \u015fartlardaki sorgulara g\u00f6re kar\u015f\u0131la\u015ft\u0131r\u0131p getirmektedir.Ben bu \u00f6rne\u011fimizde Northwind database \u00fczerinden anlat\u0131m yapaca\u011f\u0131m.<\/p>\n<p>AutoCompleteExtender\u00a0kontrol\u00fc, ad\u0131ndan da anla\u015f\u0131labilece\u011fi gibi bir Extender kontrol\u00fcd\u00fcr.Yani \u00e7al\u0131\u015fmas\u0131 i\u00e7in ba\u015fka bir kontrole ba\u011flanmas\u0131 \u015fartt\u0131r.Bu kontrol ise AutoCompleteExtender\u00a0i\u00e7in TextBox kontrol\u00fcd\u00fcr.<br \/>\nBu kontrol\u00fcn genel anlamdaki i\u015flevi, kullan\u0131c\u0131n\u0131n yazd\u0131\u011f\u0131 belirli karakterden sonraki verinin s\u00fcrekli tetiklenmesidir.Ve her tetikte o verinin tamamlay\u0131c\u0131 s\u0131fatlar\u0131n\u0131, veritab\u0131n\u0131n\u0131 denetleyecek, e\u011fer varsa kutucukta g\u00f6z\u00fckecektir.<\/p>\n<p><strong>AutoCompleteExtender\u00a0kontrol\u00fc, sunucuda yapaca\u011f\u0131 talepleri bizim olu\u015fturaca\u011f\u0131m\u0131z bir Web Service \u00fczerinden ger\u00e7ekle\u015ftirecektir.Bu Web Service&#8217;in i\u00e7inde string dizisi olarak bize sonu\u00e7 d\u00f6nd\u00fcrecek bir Web Method mevcuttur.Burada \u00f6nemli bir nokta ise, TextBox&#8217;tan g\u00f6nderilecek de\u011ferler bu Web Metod &#8220;<strong>prefixText<\/strong>\u00a0&#8221; isimli parametresine verilecektir.Bu isim de\u011fi\u015ftirilmemelidir.\u00d6zeldir!!!<\/strong><\/p>\n<p>\u015eimdi bu kontrol\u00fcn\u00fcn kullan\u0131\u015fl\u0131 \u00f6zelliklerine de\u011finelim sonrada konuyu g\u00fczel bir \u00f6rnekle izah edelim.<\/p>\n<ul>\n<li><strong>ServicePath<\/strong> : Bu kontrol\u00fcn talepleri ger\u00e7ekle\u015ftirece\u011fi Web Service&#8217;in adresi bu \u00f6zelli\u011fe yaz\u0131l\u0131r.<\/li>\n<li><strong>ServiceMethod<\/strong> : Web Service&#8217;deki Web Metodumuzun ismini buraya yazaca\u011f\u0131z.<\/li>\n<li><strong>BehaviorID<\/strong> : JavaScript fonksiyonlar\u0131 i\u00e7erisindeyken AutoCompleteExtender kontrol\u00fcn\u00fcn i\u00e7eri\u011findeki listeye eri\u015fmemizi sa\u011flayan \u00f6zellik.<\/li>\n<li><strong>OnClientPopulated<\/strong> : \u0130stemci taraf\u0131nda Web Servicesinden gelen veriler y\u00fcklendi\u011fi esnada tetiklenen olay fonksiyonu.Servisten gelen de\u011ferlerin istenilen formatta listelenmesini sa\u011flar\u0131z.<\/li>\n<li><strong>OnClientItemSelected<\/strong> : Kutucuktan bir se\u00e7enek se\u00e7ildi\u011fi esnada istemci taraf\u0131ndan tetiklenecek olay fonksiyonu.<\/li>\n<li><strong>Enabled<\/strong> : \u00c7al\u0131\u015fabilirli\u011fini belirtir. True ya da False<\/li>\n<li><strong>MinimumPrefixLength<\/strong> :\u00a0Otomatik Tamamlama\u2019nin en az ka\u00e7 karakter ile \u00e7alisagini belirtir.<\/li>\n<\/ul>\n<p align=\"justify\">\u015eimdi ilk i\u015f olarak Web Service&#8217;imizi yazal\u0131m.<\/p>\n<p>Benim olu\u015fturaca\u011f\u0131m \u00f6rnekte, TextBox&#8217;umuza yaz\u0131lan de\u011ferler, Northwind veritaban\u0131ndaki Musteriler tablosunda MusteriAdi kolonundaki verilerle kar\u015f\u0131la\u015ft\u0131r\u0131l\u0131p tamamlanacakt\u0131r.<br \/>\nWeb Service&#8217;imin ad\u0131na &#8220;MusterilerService.asmx&#8221; koyuyorum.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n--- MusterilerService.cs ---\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Web;\r\nusing System.Web.Services;\r\nusing System.Data.SqlClient;\r\n\r\n&#x5B;WebService(Namespace = &quot;http:\/\/tempuri.org\/&quot;)]\r\n&#x5B;WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]\r\n\r\n&#x5B;System.Web.Script.Services.ScriptService]\r\n\/\/Ajax'\u0131n bu Web Service'i kullanabilmesi i\u00e7in bu kodu ekliyoruz.\r\npublic class MusterilerService : System.Web.Services.WebService\r\n{\r\n    &#x5B;WebMethod]\r\n    public string&#x5B;] GetMusteriler(string prefixText)\r\n    {\r\n        \/\/prefixText ad\u0131ndaki string parametre, geriye string dizisi d\u00f6nen herhangi bir isimde metod olu\u015fturuyoruz.\r\n        SqlConnection baglanti = new SqlConnection(&quot;Server=Gen\u00e7ay-Gen\u00e7ay;Database=Northwind;Trusted_Connection=True;&quot;);\r\n        SqlCommand cmd = new SqlCommand(&quot;Select MusteriAdi from Musteriler where MusteriAdi like @MusteriAdi + '%' order by MusteriAdi&quot;, baglanti);\r\n        cmd.Parameters.AddWithValue(&quot;@MusteriAdi&quot;,prefixText);\r\n        baglanti.Open();\r\n        SqlDataReader dr = cmd.ExecuteReader();\r\n        List&lt;string&gt; MusteriAdlari = new List&lt;string&gt;();\r\n        if (dr.HasRows)\r\n        {\r\n            while (dr.Read())\r\n            {\r\n                MusteriAdlari.Add(dr&#x5B;&quot;MusteriAdi&quot;].ToString());\r\n            }\r\n        }\r\n        baglanti.Close();\r\n        baglanti.Dispose();\r\n        cmd.Dispose();\r\n        return MusteriAdlari.ToArray();\r\n    }\r\n}\r\n<\/pre>\n<p>Yukar\u0131da olu\u015fturdu\u011fumuz Web Service&#8217;i izah edersek e\u011fer, \u00f6zel isim olan &#8220;prefixText&#8221; parametresine g\u00f6nderilen de\u011ferleri Like sorgusuyla MusteriAdi kolonunda tamaml\u0131yoruz ve gelen sonuclar\u0131 string dizisi olarak geri d\u00f6nd\u00fcr\u00fcyoruz.Buradaki SQL kodlar\u0131n\u0131 biliyorsunuz ve anl\u0131yorsunuz varsay\u0131yorum.Lakin burdaki SQL i\u015flevini anlatmam konuyu farkl\u0131 konulara sapt\u0131raca\u011f\u0131 i\u00e7in kompleksle\u015ftirecektir.<\/p>\n<p>\u015eimdi s\u0131ra AutoCompleteExtender\u00a0kontrol\u00fcn\u00fc haz\u0131rlamaya geldi.Default.aspx ad\u0131nda bir Web Form a\u00e7\u0131p gerekli i\u015flemleri oradan takip edelim.<br \/>\nSayfaya birer tane TextBox, ScriptManager ve AutoCompleteExtender\u00a0nesnesi koyal\u0131m.Sayfan\u0131n Source kodlar\u0131 a\u015fa\u011f\u0131daki gibi olacakt\u0131r.AutoCompleteExtender\u00a0nesnesine a\u015fa\u011f\u0131daki Source kodlar\u0131ndaki gibi yap\u0131land\u0131ral\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    &lt;asp:ScriptManager ID=&quot;ScriptManager1&quot; runat=&quot;server&quot;&gt;\r\n    &lt;\/asp:ScriptManager&gt;\r\n    &lt;asp:TextBox ID=&quot;TextBox1&quot; runat=&quot;server&quot; Width=&quot;202px&quot;&gt;&lt;\/asp:TextBox&gt;\r\n    &lt;asp:AutoCompleteExtender ID=&quot;TextBox1_AutoCompleteExtender&quot; runat=&quot;server&quot; DelimiterCharacters=&quot;&quot;\r\n        Enabled=&quot;True&quot; ServicePath=&quot;MusterilerService.asmx&quot; ServiceMethod=&quot;GetMusteriler&quot;\r\n        MinimumPrefixLength=&quot;1&quot; TargetControlID=&quot;TextBox1&quot;&gt;\r\n    &lt;\/asp:AutoCompleteExtender&gt;\r\n<\/pre>\n<p>Son olarak projeyi derleyip \u00e7al\u0131\u015ft\u0131ral\u0131m.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/07\/Son.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-825\" title=\"Son\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/07\/Son.png\" alt=\"\" width=\"228\" height=\"267\" \/><\/a>Umar\u0131m faydalan\u0131rs\u0131n\u0131z..<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Google Suggest yap\u0131s\u0131, Google aramalar\u0131nda bizlere kolayl\u0131k sa\u011flayan, arad\u0131\u011f\u0131m\u0131z de\u011ferlerle ilgili alternatifleri sunan bir yap\u0131d\u0131r.Tabi \u00f6rnek olarak a\u00e7\u0131klaman\u0131n l\u00fczmu olmasada prensib gere\u011fi mant\u0131\u011f\u0131n\u0131 yaz\u0131l\u0131 olarak anlatmak boynumuzun borcu.Arama kutusuna &#8220;Ank&#8221; de\u011ferlerini girerseniz e\u011fer &#8220;Ankara&#8221;,&#8221;Ankara&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,10,23],"tags":[744,252,253,254],"class_list":["post-823","post","type-post","status-publish","format-standard","hentry","category-ajax","category-asp-net","category-web-tasarim","tag-ajax","tag-autocompleteextender","tag-google","tag-suggest"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/823","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=823"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/823\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=823"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=823"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=823"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}