﻿
{"id":1251,"date":"2013-01-08T22:35:55","date_gmt":"2013-01-08T22:35:55","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=1251"},"modified":"2013-01-08T22:35:55","modified_gmt":"2013-01-08T22:35:55","slug":"mvcde-isvalidfield-metodu","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/mvcde-isvalidfield-metodu\/","title":{"rendered":"MVC&#8217;de IsValidField Metodu"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Bu yaz\u0131mda MVC mimarisinde IsValidField metodunu ele alaca\u011f\u0131z.Mevzu bahis olan metodun te\u015fkil etti\u011fi \u00f6nemi g\u00f6stermek, anlatabilmek i\u00e7in \u015f\u00f6yle bir yap\u0131 \u00fczerinden konuyu ele alaca\u011f\u0131m.G\u00fcn\u00fcm\u00fczdeki web sitelerinin genelinde i\u00e7erik arama yap\u0131s\u0131 mevcuttur.Yani ben \u00e7al\u0131\u015ft\u0131\u011f\u0131m projelerin %90&#8217;\u0131nda, siteye \u00f6zel i\u00e7erik arama motoru yapt\u0131\u011f\u0131m\u0131 biliyorum.MVC mimarisi ile \u00e7al\u0131\u015f\u0131lan siteler \u00fczerinde de arama motoru yapaca\u011f\u0131m\u0131z durumlar da, beklemedi\u011fimiz olas\u0131 durumlar olu\u015fabilir.\u00d6zellikle MVC mimarisinde bu konunun i\u00e7eri\u011fiyle ba\u011fda\u015f\u0131k bir durumla kar\u015f\u0131la\u015faca\u011f\u0131z ve bu engeli IsValidField metodu ile a\u015faca\u011f\u0131z.<br \/>\n<!--more--><\/p>\n<p>Yukar\u0131daki paragrafta, konuya giri\u015f pek ayd\u0131nlat\u0131c\u0131 bir \u015fekilde olmasada, MVC mimarisiyle \u00fczerinde \u00e7al\u0131\u015f\u0131lan bir projenin i\u00e7erik arama motoru yap\u0131l\u0131rken \u00e7\u0131kabilecek hata \u00fczerine konu\u015faca\u011f\u0131z.<\/p>\n<p>Misal olarak, bir tablo \u00fczerinde arama i\u015flemleri yapaca\u011f\u0131z.Varsayal\u0131m ki, o tablonun kolonlar\u0131 i\u015flenmesi i\u00e7in &#8220;Bind&#8221; edilmi\u015f ve Validation kontrollerine tabii tutulmu\u015f.\u00d6rnek olarak a\u015fa\u011f\u0131daki gibi;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        &#x5B;Required(ErrorMessage=&quot;L\u00fctfen bo\u015f ge\u00e7meyiniz.&quot;)]\r\n        &#x5B;StringLength(50,ErrorMessage=&quot;L\u00fctfen 50 karakteri a\u015fmay\u0131n\u0131z.&quot;)]\r\n        public string Kolon1 { get; set; }\r\n\r\n        &#x5B;Required(ErrorMessage = &quot;L\u00fctfen bo\u015f ge\u00e7meyiniz.&quot;)]\r\n        public string Kolon2 { get; set; }\r\n\r\n        &#x5B;Required(ErrorMessage = &quot;L\u00fctfen bo\u015f ge\u00e7meyiniz.&quot;)]\r\n        public string Kolon3 { get; set; }\r\n<\/pre>\n<p>Bu yap\u0131ya sahip bir tablo \u00fczerinde arama i\u015flemi yapacak [HttpPost] Attribute&#8217;una sahip Action metodumuzu yazd\u0131\u011f\u0131m\u0131z zaman, &#8220;ModelState.IsValid&#8221; komutu ile, Validation i\u015flemlerinin kontrol\u00fcn\u00fc yapmam\u0131z gerekecektir.Ha yapmasakta olur ama madem b\u00f6yle bir tedbir al\u0131nm\u0131\u015f, taktirinide g\u00f6z ard\u0131 etmemek gerek.<\/p>\n<p>Arama yap\u0131lacak tablonun b\u00fct\u00fcn kolonlar\u0131ndan ziyade tek bir kolonda arama yapt\u0131raca\u011f\u0131m\u0131z\u0131 d\u00fc\u015f\u00fcnelim.<\/p>\n<p>Arama i\u015flemini sadece &#8220;Kolon1&#8221; ad\u0131na sahip kolonumuz \u00fczerinde yapacaksak e\u011fer, yazaca\u011f\u0131m\u0131z Action arama metodumuz da, &#8220;ModelState.IsValid&#8221; kontrol\u00fc yapt\u0131\u011f\u0131m\u0131z zaman hata alaca\u011f\u0131z.Bu alaca\u011f\u0131m\u0131z hatan\u0131n sebebini \u015fu \u015fekilde izah edeyim.<\/p>\n<p>Kullan\u0131c\u0131, View katman\u0131 sayesinde g\u00f6rebildi\u011fi form \u00fczerinde arama i\u015flemi yapmak isterse e\u011fer, sadece &#8220;Kolon1&#8221; isimli kolona yaz\u0131 yazacakt\u0131r.Normal&#8217;de, bu yaz\u0131lan yaz\u0131 post edilince veritaban\u0131na gidip, sorgumuza uyan \u015fekilde sonu\u00e7 d\u00f6nd\u00fcrmesi gerekiyor.\u00c7\u00fcnk\u00fc, &#8220;Kolon1&#8221; isimli kolonun &#8220;Required&#8221; Attribute&#8217;u &#8220;True&#8221; de\u011feri d\u00f6necektir.<\/p>\n<p>Ancak, yaz\u0131l\u0131m konusu bazen d\u00fcz mant\u0131kla \u00e7al\u0131\u015fmamaktad\u0131r.Her ne kadar kullan\u0131c\u0131 &#8220;Kolon1&#8221; kolonu \u00fczerinde i\u015flem yapabilse de, post i\u015flemi sonucunda, o sayfan\u0131n kulland\u0131\u011f\u0131 modelin di\u011fer propertylerinde &#8220;Required&#8221; kontrol\u00fc varsa e\u011fer, bo\u015f ge\u00e7ildiklerinden dolay\u0131 &#8220;False&#8221; de\u011feri d\u00f6nd\u00fcreceklerdir ve i\u015flemimiz hatayla sonu\u00e7lanacakt\u0131r.Dikkat ederseniz, &#8220;Kolon2&#8221; ve &#8220;Kolon3&#8221; isimlerine sahip kolonlar &#8220;Required&#8221; Validation kontrol\u00fcne tabii tutulmaktad\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        \/\/Tablomuzun ad\u0131 &quot;AramaTablo&quot;\r\n        VeritabaniDataContext Veri = new VeritabaniDataContext();\r\n        public ActionResult Index()\r\n        {\r\n            if (Session&#x5B;&quot;SorguSonucu&quot;] != null)\r\n            {\r\n                List&lt;AramaTablo&gt; Sonuc = Session&#x5B;&quot;SorguSonucu&quot;] as List&lt;AramaTablo&gt;;\r\n                return View(Sonuc);\r\n            }\r\n            else\r\n            {\r\n                return View(Veri.AramaTablos);\r\n            }\r\n        }\r\n        public ActionResult Ara()\r\n        {\r\n            return View();\r\n        }\r\n        &#x5B;HttpPost]\r\n        public ActionResult Ara(AramaTablo Sonuc)\r\n        {\r\n            if (!ModelState.IsValid)\r\n                return View(Sonuc);\r\n            try\r\n            {\r\n                List&lt;AramaTablo&gt; SorguSonucu = (from Kolon in Veri.AramaTablos\r\n                                                where Kolon.Kolon1.Contains(Sonuc.Kolon1)\r\n                                                select Kolon).ToList();\r\n                if (Session&#x5B;&quot;SorguSonucu&quot;] != null)\r\n                {\r\n                    Session&#x5B;&quot;SorguSonucu&quot;] = SorguSonucu;\r\n                }\r\n                else\r\n                {\r\n                    Session.Add(&quot;SorguSonucu&quot;, SorguSonucu);\r\n                }\r\n                return RedirectToAction(&quot;Index&quot;);\r\n            }\r\n            catch (Exception)\r\n            {\r\n                throw;\r\n            }\r\n        }\r\n<\/pre>\n<p>E\u011fer bu \u015fekilde bir arama i\u015flemi yapmaya \u00e7al\u0131\u015f\u0131rsak &#8220;Requried&#8221; Validation kontrol\u00fcn\u00fc a\u015famayacak ve i\u015flem ger\u00e7ekle\u015ftirilmeyecektir.<\/p>\n<p>Sadece &#8220;Kolon1&#8221; ismindeki kolonda arama yapt\u0131\u011f\u0131m\u0131zdan dolay\u0131, &#8220;ModelState.IsValid&#8221; kontrol\u00fc di\u011fer propertylerin Validation kontrollerinden dolay\u0131 bize i\u015flem yapt\u0131rm\u0131yor.Bu durumu a\u015fabilmek i\u00e7in, &#8220;ModelState&#8221; ile kontrol yaparken, o anki i\u015flevin sadece &#8220;Kolon1&#8221; \u00fczerinde i\u015flenece\u011fini g\u00f6stermemiz gerekmektedir.Bu i\u015flemide IsValidField metodunu kullanarak rahatl\u0131kla yapabiliriz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n&#x5B;HttpPost]\r\n        .\r\n        .\r\n        .\r\n        public ActionResult Ara(AramaTablo Sonuc)\r\n        {\r\n            if (!ModelState.IsValidField(&quot;Kolon1&quot;))\r\n                return View(Sonuc);\r\n        .\r\n        .\r\n        .\r\n<\/pre>\n<p>E\u011fer bu \u015fekilde kodumuzu d\u00fczeltirsek, o sayfan\u0131n modeli \u00fczerinde sadece &#8220;Kolon1&#8221; ad\u0131ndaki propertynin ad\u0131nda i\u015flem yapaca\u011f\u0131m\u0131z\u0131 ve onu kontrol etmesi gerekti\u011fini s\u00f6ylemi\u015f oluyoruz.<\/p>\n<p>Bu yaz\u0131mda da IsValidField metodu hakk\u0131nda detayl\u0131 bir bilgi aktarm\u0131\u015f oldum.Umar\u0131m faydalan\u0131rs\u0131n\u0131z.<br \/>\nBir sonraki yaz\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere..<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar \ud83d\ude09<\/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>Bu yaz\u0131mda MVC mimarisinde IsValidField metodunu ele alaca\u011f\u0131z.Mevzu bahis olan metodun te\u015fkil etti\u011fi \u00f6nemi g\u00f6stermek, anlatabilmek i\u00e7in \u015f\u00f6yle bir yap\u0131 \u00fczerinden konuyu ele alaca\u011f\u0131m.G\u00fcn\u00fcm\u00fczdeki web sitelerinin genelinde i\u00e7erik arama yap\u0131s\u0131 mevcuttur.Yani ben \u00e7al\u0131\u015ft\u0131\u011f\u0131m projelerin&#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":[11],"tags":[746,328,327,283,179],"class_list":["post-1251","post","type-post","status-publish","format-standard","hentry","category-asp-net-mvc","tag-asp-net-mvc","tag-isvalid","tag-isvalidfield","tag-mvc","tag-validation"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/1251","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=1251"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/1251\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=1251"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=1251"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=1251"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}