﻿
{"id":973,"date":"2012-11-19T22:53:29","date_gmt":"2012-11-19T22:53:29","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=973"},"modified":"2012-11-19T22:53:29","modified_gmt":"2012-11-19T22:53:29","slug":"asp-net-mvc-calisma-mekanizmasi-3","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/asp-net-mvc-calisma-mekanizmasi-3\/","title":{"rendered":"Asp.NET MVC \u00c7al\u0131\u015fma Mekanizmas\u0131 &#8211; 3"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Bu yaz\u0131ma, <a href=\"http:\/\/www.gencayyildiz.com\/blog\/asp-net-mvc-calisma-mekanizmasi-1\/\" target=\"_blank\">Asp.NET MVC \u00c7al\u0131\u015fma Mekanizmas\u0131 \u2013 1<\/a> ve <a href=\"http:\/\/www.gencayyildiz.com\/blog\/asp-net-mvc-calisma-mekanizmasi-2\/\" target=\"_blank\">Asp.NET MVC \u00c7al\u0131\u015fma Mekanizmas\u0131 \u2013 2<\/a> konulu yaz\u0131lar\u0131mda ki &#8220;OrnekCalisma&#8221; ad\u0131ndaki Asp.NET MVC projemiz \u00fczerinden anlat\u0131ma devam edece\u011fim.<\/p>\n<p>Bu yaz\u0131m\u0131zda Controller katman\u0131ndaki HomeController.cs s\u0131n\u0131f\u0131n\u0131 a\u00e7al\u0131m ve i\u00e7indeki metodlar\u0131 inceleyelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    &#x5B;HandleError]\r\n    public class HomeController : Controller\r\n    {\r\n        public ActionResult Index()\r\n        {\r\n            ViewData&#x5B;&quot;Message&quot;] = &quot;Welcome to ASP.NET MVC!&quot;;\r\n\r\n            return View();\r\n        }\r\n        public ActionResult About()\r\n        {\r\n            return View();\r\n        }\r\n    }\r\n<\/pre>\n<p>Buradaki g\u00f6rd\u00fc\u011f\u00fcn\u00fcz Index ve About metodlar\u0131na biz ActionResult tipinden metodlar dedik.Controller katman\u0131nda bulunan herhangi bir Controller ad\u0131nda View katman\u0131nda da klas\u00f6r bulunmas\u0131 gerekiyordu.O Controller s\u0131n\u0131f\u0131 i\u00e7inde ise, View katman\u0131nda kendi ad\u0131nda bulunan klas\u00f6r\u00fcn i\u00e7indeki sayfalar\u0131n isimlerinde ActionResult tipinden metodlar mevcuttur.HomeController s\u0131n\u0131f\u0131n\u0131da incelersek bu \u015fekildedir.<\/p>\n<p>\u015eimdi Index ve About ismindeki metodlar, metod ise, parametrede alabilirler.O halde ben About metoduna bir parametre veriyorum.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n\/\/Herhangi bir tipten parametre olabilir.Ben string tipinden tan\u0131mlad\u0131m.\r\n        public ActionResult About(string OrnekParametre)\r\n        {\r\n            return View();\r\n        }\r\n<\/pre>\n<p>string tipinden OrnekParametre ad\u0131nda bir parametre tan\u0131mlad\u0131k.Bu parametreye gelen de\u011feri biz About sayfas\u0131 a\u00e7\u0131l\u0131nca yazd\u0131ral\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        public ActionResult About(string OrnekParametre)\r\n        {\r\n            ViewData&#x5B;&quot;GelenDeger&quot;] = OrnekParametre;\r\n            return View();\r\n        }\r\n<\/pre>\n<p>Yukar\u0131daki gibi ViewData ile parametremizdeki de\u011feri ta\u015f\u0131yorum.Bu ActionResult tipindeki About metodu, \u00e7al\u0131\u015ft\u0131\u011f\u0131nda return View(); dedi\u011finden View katman\u0131ndaki gerekli sayfas\u0131na gidecektir.Bizde ViewData ile o sayfadan gelen veriyi tekrardan istedi\u011fimiz alana yazd\u0131rabilece\u011fiz.<\/p>\n<p>\u015eimdi View katman\u0131ndaki Home klas\u00f6r\u00fc i\u00e7indeki About.aspx sayfas\u0131na gelip, a\u015fa\u011f\u0131daki gibi bir d\u00fczenleme yapal\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n&lt;%@ Page Language=&quot;C#&quot; MasterPageFile=&quot;~\/Views\/Shared\/Site.Master&quot; Inherits=&quot;System.Web.Mvc.ViewPage&quot; %&gt;\r\n&lt;asp:Content ID=&quot;aboutTitle&quot; ContentPlaceHolderID=&quot;TitleContent&quot; runat=&quot;server&quot;&gt;\r\n    About Us\r\n&lt;\/asp:Content&gt;\r\n&lt;asp:Content ID=&quot;aboutContent&quot; ContentPlaceHolderID=&quot;MainContent&quot; runat=&quot;server&quot;&gt;\r\n    &lt;h2&gt;\r\n        About&lt;\/h2&gt;\r\n    &lt;p&gt;\r\n        Put content here.\r\n    &lt;\/p&gt;\r\n    &lt;p&gt;\r\n        Parametreden gelen de\u011fer :\r\n        &lt;%:ViewData&#x5B;&quot;GelenDeger&quot;] %&gt;\r\n    &lt;\/p&gt;\r\n&lt;\/asp:Content&gt;\r\n<\/pre>\n<p>Burada g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi ViewData&#8217;da &#8220;GelenDeger&#8221; ad\u0131nda ta\u015f\u0131nan de\u011feri gerekli alana yazd\u0131r\u0131yorum.Bu \u015fekilde projemizi \u00e7al\u0131\u015ft\u0131r\u0131rsak e\u011fer, a\u015fa\u011f\u0131da g\u00f6rece\u011finiz gibi ViewData ile gelen de\u011fer bo\u015f gelecektir.<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/11\/parametre.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-978\" title=\"parametre\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/11\/parametre.png\" alt=\"\" width=\"418\" height=\"250\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/11\/parametre.png 418w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/11\/parametre-300x179.png 300w\" sizes=\"auto, (max-width: 418px) 100vw, 418px\" \/><\/a><br \/>\nBunun sebebi, string tipinden olan &#8220;OrnekParametre&#8221; ad\u0131ndaki parametremizin varsay\u0131lan olarak herhangi bir de\u011fer atamam\u0131\u015f olmam\u0131zd\u0131r.Bu durumda parametremiz NULL de\u011ferde gelmektedir.<\/p>\n<p>Madem varsay\u0131lan olarak de\u011fer atanmam\u0131\u015f, o halde \u015fimdilik biz manuel olarak de\u011fer atayal\u0131m.Adres \u00e7ubu\u011funa gelerek a\u015fa\u011f\u0131daki gibi bir yap\u0131 yazal\u0131m.<br \/>\n&#8220;<span style=\"color: #008080;\">http:\/\/localhost:2697\/GG\/Home\/About\/<\/span><strong><span style=\"color: #ff0000;\">OrnekParametreDegeri<\/span><\/strong>&#8221;<\/p>\n<p>Yukar\u0131daki URL yap\u0131s\u0131na bakarsak e\u011fer, \u00f6nceki yaz\u0131lar\u0131m\u0131zda, \u015fu an \u00fczerinde \u00e7al\u0131\u015ft\u0131\u011f\u0131m\u0131z projenin yani &#8220;OrnekCalisma&#8221; ad\u0131ndaki projenin Global.asax dosyas\u0131yla ilgili de\u011fi\u015fiklikler yap\u0131lm\u0131\u015ft\u0131.URL yap\u0131s\u0131na varsay\u0131lan olarak &#8220;GG&#8221; de\u011feri verilmi\u015f bir &#8220;Isim&#8221; de\u011fi\u015fkeni koyulmu\u015ftu.E\u011fer \u00f6nceki yaz\u0131lar\u0131m\u0131 okumad\u0131ysan\u0131z \u015fimdi bu yaz\u0131y\u0131 buradan b\u0131rak\u0131p \u00f6nceki yaz\u0131lar\u0131m\u0131 okumaya ba\u015flay\u0131n.<\/p>\n<p>URL yap\u0131s\u0131n\u0131n k\u0131rm\u0131z\u0131yla renkle ve kal\u0131n bir \u015fekilde yaz\u0131lan alan\u0131na bakarsak e\u011fer, &#8220;OrnekParametre&#8221; ad\u0131ndaki parametremize, &#8220;OrnekParametreDegeri&#8221; verisini ta\u015f\u0131yan de\u011fer g\u00f6nderilmi\u015ftir.<\/p>\n<p>E\u011fer bu \u015fekilde de sayfam\u0131z\u0131 \u00e7a\u011f\u0131r\u0131rsak gene parametremiz NULL de\u011ferde gelecektir ve gerekli alanda hi\u00e7 bir de\u011fer yazmayacakt\u0131r.<\/p>\n<p>Bu durumun nedeni yine Global.asax dosyas\u0131nda yatmaktad\u0131r.<\/p>\n<p>\u015eimdi Global.asax dosyas\u0131n\u0131 a\u00e7\u0131p routes parametresinin MapRoute metodunu tekrardan inceleyelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            routes.MapRoute(\r\n              &quot;Default&quot;, \/\/ Route name\r\n              &quot;{Isim}\/{controller}\/{action}\/{id}&quot;, \/\/ URL with parameters\r\n              new { controller = &quot;Home&quot;, action = &quot;About&quot;, id = UrlParameter.Optional, Isim = &quot;GG&quot; } \/\/ Parameter defaults\r\n          );\r\n<\/pre>\n<p>Global.asax dosyas\u0131ndaki URL yap\u0131s\u0131n\u0131 tekrardan incelersek e\u011fer, en sonunda &#8220;id&#8221; ad\u0131nda de\u011fi\u015fken ismi mevcuttur.Peki benim HomeController.cs s\u0131n\u0131f\u0131 alt\u0131ndaki ActionResult tipinden olan About metoduna verdi\u011fim parametrenin ad\u0131 nedir?&#8221;OrnekParametre&#8221;<br \/>\nHee demek ki, URL yap\u0131s\u0131ndaki de\u011fi\u015fken ismi ile ActionResult tipindeki About metoduma ayn\u0131 isimde parametre vermeliyim.Yani buradaki &#8220;OrnekParametre&#8221; ad\u0131n\u0131 &#8220;id&#8221; olarak de\u011fi\u015ftirirsem hata d\u00fczelecektir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        public ActionResult About(string id)\r\n        {\r\n            ViewData&#x5B;&quot;GelenDeger&quot;] = id;\r\n            return View();\r\n        }\r\n<\/pre>\n<p>Bu \u015fekildeyken projemizi \u00e7al\u0131\u015ft\u0131r\u0131rsak e\u011fer, About sayfam\u0131zdaki de\u011fer alan\u0131 yine bo\u015f gelecektir.\u00c7\u00fcnk\u00fc &#8220;id&#8221; ismindeki parametremizede varsay\u0131lan bir de\u011fer vermedik.<\/p>\n<p>Tekrardan \u00fcst sat\u0131rlardaki gibi ayn\u0131 maluel parametre de\u011ferini girersek e\u011fer ve o \u015fekilde sayfam\u0131z\u0131 \u00e7a\u011f\u0131r\u0131rsak ne olacak inceleyelim.<br \/>\n&#8220;<span style=\"color: #008080;\">http:\/\/localhost:2697\/GG\/Home\/About\/<\/span><strong><span style=\"color: #ff0000;\">OrnekParametreDegeri<\/span><\/strong>&#8221;<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/11\/parametre2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/11\/parametre2.png\" alt=\"\" title=\"parametre2\" width=\"416\" height=\"258\" class=\"aligncenter size-full wp-image-980\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/11\/parametre2.png 416w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/11\/parametre2-300x186.png 300w\" sizes=\"auto, (max-width: 416px) 100vw, 416px\" \/><\/a><br \/>\nG\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi parametremize g\u00f6nderilen de\u011fer bu sefer &#8220;id&#8221; ismindeki string tipinde parametre taraf\u0131ndan yakaland\u0131 ve ViewData ile ta\u015f\u0131narak About sayfas\u0131nda istenilen alana yazd\u0131r\u0131ld\u0131.<\/p>\n<p>\u015eunu kavram\u0131\u015f olmam\u0131z laz\u0131m.Global.asax da tan\u0131mlanm\u0131\u015f URL yap\u0131s\u0131na g\u00f6re verilen de\u011fi\u015fken ismi ActionResult tipinden olan metodumuzda parametre ad\u0131 olarak kullan\u0131lmak zorundad\u0131r.<\/p>\n<p>\u015eimdide bu parametremize varsay\u0131lan de\u011fer tan\u0131mlayarak, manuel yazmadan bir de\u011fer atayal\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            routes.MapRoute(\r\n              &quot;Default&quot;, \/\/ Route name\r\n              &quot;{Isim}\/{controller}\/{action}\/{id}&quot;, \/\/ URL with parameters\r\n              new { controller = &quot;Home&quot;, action = &quot;About&quot;, id = &quot;Gen\u00e7ay Y\u0131ld\u0131z&quot;, Isim = &quot;GG&quot; } \/\/ Parameter defaults\r\n          );\r\n<\/pre>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi id de\u011fi\u015fkenine &#8220;Gen\u00e7ay Y\u0131ld\u0131z&#8221; de\u011fer atamas\u0131 yap\u0131lm\u0131\u015ft\u0131r.Bu \u015fekilde projeyi \u00e7al\u0131\u015ft\u0131r\u0131rsak e\u011fer, About sayfas\u0131nda gerekli yerde &#8220;Gen\u00e7ay Y\u0131ld\u0131z&#8221; de\u011ferinin yaz\u0131ld\u0131\u011f\u0131n\u0131 g\u00f6rece\u011fiz.<\/p>\n<p>\u015eimdi \u015fu hususu gelin beraber sorgulayal\u0131m.<br \/>\nBiz \u00e7al\u0131\u015ft\u0131\u011f\u0131m\u0131z projemizin her yerinde sadece Global.asax dosyas\u0131nda bulunan bu URL yap\u0131s\u0131na uygun linklermi olu\u015fturabilece\u011fiz.Ayriyetten ActionResult tipinden olan metodlar\u0131m\u0131z\u0131n alaca\u011f\u0131 parametrelere s\u00fcrekli &#8220;id&#8221; isminimi vermek zorunday\u0131z.Tabiki de hay\u0131r.<\/p>\n<p>Farkl\u0131 yap\u0131da URL yap\u0131s\u0131 olu\u015fturmak ve ActionResult metodlar\u0131nda farkl\u0131 parametre kullanmak i\u00e7in Global.asax dosyas\u0131nda ki, routes parametresinin, MapRoute metodundan ba\u015fka birtane daha yazmam\u0131z yeterli olacakt\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n\/\/Bu ilk yap\u0131m\u0131zd\u0131r.\r\n            routes.MapRoute(\r\n              &quot;Default&quot;, \/\/ Route name\r\n              &quot;{Isim}\/{controller}\/{action}\/{id}&quot;, \/\/ URL with parameters\r\n              new { controller = &quot;Home&quot;, action = &quot;About&quot;, id = &quot;Gen\u00e7ay Y\u0131ld\u0131z&quot;, Isim = &quot;GG&quot; } \/\/ Parameter defaults\r\n          );\r\n\r\n\/\/Bu ikinci yap\u0131m\u0131zd\u0131r.\r\n            routes.MapRoute(\r\n              &quot;BenimYapim&quot;, \/\/ Route name\r\n              &quot;{controller}\/{action}\/{parametre1}\/{parametre2}&quot;, \/\/ URL with parameters\r\n              new { controller = &quot;Home&quot;, action = &quot;About&quot;, parametre1 = &quot;Birinci Parametre De\u011feri&quot;, parametre2 = &quot;\u0130kinci Parametre De\u011feri&quot; } \/\/ Parameter defaults\r\n          );\r\n<\/pre>\n<p>Yukar\u0131daki kodlar\u0131 incelerseniz e\u011fer, ad\u0131 &#8220;BenimYapim&#8221; olan bir yap\u0131 olu\u015fturduk.Bu URL yap\u0131s\u0131n\u0131n \u015femas\u0131 ise g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi Controller\/Action\/Parametre1\/Parametre2 dir.Burada dikkat etmemiz gereken husus var.controller ve action anahtar s\u00f6zc\u00fckleri \u00f6zel olduklar\u0131ndan dolay\u0131 de\u011fi\u015ftirilmemelidirler.parametre1 ismindeki de\u011fi\u015fkene varsay\u0131lan olarak &#8220;Birinci Parametre De\u011feri&#8221;, parametre2 ismindeki de\u011fi\u015fkene varsay\u0131lan olarak &#8220;\u0130kinci Parametre De\u011feri&#8221; de\u011ferleri verilmi\u015ftir.<\/p>\n<p>\u015eimdi ise ActionResult tipinden olan metodumuzu d\u00fczenleyelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        public ActionResult About(string parametre1,string parametre2)\r\n        {\r\n            ViewData&#x5B;&quot;Parametre1&quot;] = parametre1;\r\n            ViewData&#x5B;&quot;Parametre2&quot;] = parametre2;\r\n            return View();\r\n        }\r\n<\/pre>\n<p>ve ard\u0131ndan About.aspx kodlar\u0131n\u0131 d\u00fczenleyelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n&lt;%@ Page Language=&quot;C#&quot; MasterPageFile=&quot;~\/Views\/Shared\/Site.Master&quot; Inherits=&quot;System.Web.Mvc.ViewPage&quot; %&gt;\r\n&lt;asp:Content ID=&quot;aboutTitle&quot; ContentPlaceHolderID=&quot;TitleContent&quot; runat=&quot;server&quot;&gt;\r\n    About Us\r\n&lt;\/asp:Content&gt;\r\n&lt;asp:Content ID=&quot;aboutContent&quot; ContentPlaceHolderID=&quot;MainContent&quot; runat=&quot;server&quot;&gt;\r\n    &lt;h2&gt;\r\n        About&lt;\/h2&gt;\r\n    &lt;p&gt;\r\n        Put content here.\r\n    &lt;\/p&gt;\r\n    &lt;p&gt;\r\n        Parametre 1 den gelen de\u011fer :\r\n        &lt;%:ViewData&#x5B;&quot;Parametre1&quot;] %&gt;\r\n    &lt;\/p&gt;\r\n    &lt;p&gt;\r\n    Parametre 2 den gelen de\u011fer :\r\n    &lt;%:ViewData&#x5B;&quot;Parametre2&quot;] %&gt;\r\n    &lt;\/p&gt;\r\n&lt;\/asp:Content&gt;\r\n<\/pre>\n<p>Bu \u015fekilde projemizi \u00e7al\u0131\u015ft\u0131r\u0131rsak e\u011fer, About sayfas\u0131nda istenilen yerlere gerekli verilen getirildi\u011fini g\u00f6rece\u011fiz.<\/p>\n<p>Art\u0131k yaz\u0131m\u0131z\u0131n sonuna gelmi\u015f bulunmaktay\u0131z.Faydalanman\u0131z dile\u011fiyle.<\/p>\n<p>\u0130yi \u00e7al\u0131\u015fmalar.<\/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\u0131ma, Asp.NET MVC \u00c7al\u0131\u015fma Mekanizmas\u0131 \u2013 1 ve Asp.NET MVC \u00c7al\u0131\u015fma Mekanizmas\u0131 \u2013 2 konulu yaz\u0131lar\u0131mda ki &#8220;OrnekCalisma&#8221; ad\u0131ndaki Asp.NET MVC projemiz \u00fczerinden anlat\u0131ma devam edece\u011fim. Bu yaz\u0131m\u0131zda Controller katman\u0131ndaki HomeController.cs s\u0131n\u0131f\u0131n\u0131 a\u00e7al\u0131m&#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,286,283],"class_list":["post-973","post","type-post","status-publish","format-standard","hentry","category-asp-net-mvc","tag-asp-net-mvc","tag-global-asax","tag-mvc"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/973","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=973"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/973\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=973"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=973"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=973"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}