﻿
{"id":1159,"date":"2012-12-22T23:08:38","date_gmt":"2012-12-22T23:08:38","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=1159"},"modified":"2012-12-22T23:08:38","modified_gmt":"2012-12-22T23:08:38","slug":"asp-net-mvc-area-olusturma","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/asp-net-mvc-area-olusturma\/","title":{"rendered":"Asp.NET MVC Area Olu\u015fturma"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Asp.NET MVC projelerinde standart dizin mant\u0131\u011f\u0131n\u0131n d\u0131\u015f\u0131nda, daha esnek bir yap\u0131 olu\u015fturmam\u0131z\u0131 sa\u011flayan Area yap\u0131s\u0131n\u0131 inceleyelim.Web projelerimizde kullan\u0131c\u0131lar\u0131n d\u0131\u015f\u0131nda site yetkililerinin g\u00f6rebildi\u011fi administrator(y\u00f6netici) paneli, ya da kullan\u0131c\u0131 rol\u00fcne g\u00f6re ula\u015f\u0131labilen alanlar bulundurmam\u0131z gerekebilir.\u00dczerinde \u00e7al\u0131\u015ft\u0131\u011f\u0131m\u0131z projenin i\u00e7inde bu alanlar\u0131 temsilen klas\u00f6rler olu\u015fturup, bu klas\u00f6r\u00fcler i\u00e7inde MVC katmanlar\u0131n\u0131 ve URL Routing \u015femas\u0131n\u0131 eklememiz gerekmektedir.Bu durum haliyle bir programc\u0131 i\u00e7in i\u015fin teferruat\u0131 ve zahmetli yan\u0131d\u0131r.Visual Studio bize bu alanlar\u0131 an\u0131nda istedi\u011fimiz isimde olu\u015fturma imkan\u0131 vermektedir.\u015eimdi bu i\u015f nas\u0131l yap\u0131l\u0131r inceleyelim.<br \/>\n<!--more--><\/p>\n<p>\u0130ngilizce kelime olan &#8220;Area&#8221; n\u0131n T\u00fcrk\u00e7e anlam\u0131 &#8220;B\u00f6lge&#8221; kelimesine e\u015fde\u011ferdir.Yani konumuzun i\u00e7eri\u011fini bu terim \u00f6zetlemektedir.Projede farkl\u0131 b\u00f6lgeler olu\u015fturmak i\u00e7in Visual Studio derleyicisi bizlere yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<p>\u00d6rnek ama\u00e7l\u0131 bir MVC projesi olu\u015ftural\u0131m.Olu\u015fturdu\u011fumuz projeye sa\u011f t\u0131klay\u0131p &#8220;Add&#8221; se\u00e7ene\u011finden sonra &#8220;Area&#8221; sekmesine t\u0131klayal\u0131m.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/12\/Area.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1160\" title=\"Area\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/12\/Area.png\" alt=\"\" width=\"595\" height=\"311\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/12\/Area.png 595w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/12\/Area-300x156.png 300w\" sizes=\"auto, (max-width: 595px) 100vw, 595px\" \/><\/a><br \/>\nKar\u015f\u0131m\u0131za a\u015fa\u011f\u0131daki gibi &#8220;Add Area&#8221; isimli bir pencere gelecektir.&#8221;Area name&#8221; alan\u0131na, b\u00f6lgemizin yani dizinimizin ismini girelim.Ben projemde herhangi bir y\u00f6netim paneli tasarlayaca\u011f\u0131m\u0131 varsay\u0131yorum ve Area m\u0131n ad\u0131na &#8220;Yonetim&#8221; diyorum.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/12\/area2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1161\" title=\"area2\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/12\/area2.png\" alt=\"\" width=\"500\" height=\"176\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/12\/area2.png 500w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/12\/area2-300x105.png 300w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/a><br \/>\n&#8220;Add&#8221; butonuna bast\u0131ktan sonra Solution Explorer penceresinden projemizi incelersek e\u011fer, &#8220;Areas&#8221; ad\u0131nda bir klas\u00f6r\u00fcn alt\u0131nda, &#8220;Yonetim&#8221; ad\u0131nda bir dizin olu\u015fturulmu\u015f ve i\u00e7ine MVC(Model View Controller) katmanlar\u0131 eklenmi\u015ftir.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/12\/are3.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1162\" title=\"are3\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/12\/are3.png\" alt=\"\" width=\"287\" height=\"341\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/12\/are3.png 287w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/12\/are3-252x300.png 252w\" sizes=\"auto, (max-width: 287px) 100vw, 287px\" \/><\/a><br \/>\nDikkat ederseniz e\u011fer, &#8220;Yonetim&#8221; ad\u0131ndaki klas\u00f6r\u00fcm\u00fcz alt\u0131nda &#8220;YonetimAreaRegistration.cs&#8221; ad\u0131nda bir klas\u00f6r bulunmaktad\u0131r.Bu klas\u00f6r\u00fc bi inceleyelim..<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nusing System.Web.Mvc;\r\nnamespace MvcApplication8.Areas.Yonetim\r\n{\r\n    public class YonetimAreaRegistration : AreaRegistration\r\n    {\r\n        public override string AreaName\r\n        {\r\n            get\r\n            {\r\n                return &quot;Yonetim&quot;;\r\n            }\r\n        }\r\n        public override void RegisterArea(AreaRegistrationContext context)\r\n        {\r\n            context.MapRoute(\r\n                &quot;Yonetim_default&quot;,\r\n                &quot;Yonetim\/{controller}\/{action}\/{id}&quot;,\r\n                new { action = &quot;Index&quot;, id = UrlParameter.Optional }\r\n            );\r\n        }\r\n    }\r\n}\r\n<\/pre>\n<p>Yukar\u0131daki kodlar\u0131 incelerseniz e\u011fer, &#8220;AreaRegistraion&#8221; s\u0131n\u0131f\u0131ndan t\u00fcretilmi\u015f &#8220;YonetimAreaRegistraiton&#8221; s\u0131n\u0131f\u0131m\u0131z\u0131n i\u00e7inde, override edilmi\u015f &#8220;AreaName&#8221; ad\u0131nda bir property mevcut.Bu propertynin i\u015flemini yukar\u0131da g\u00f6r\u00fcyorsunuz zaten.Geriye, Area&#8217;m\u0131z\u0131n ad\u0131n\u0131 string bir bi\u00e7imde g\u00f6nderiyor.<\/p>\n<p>Ayriyetten override edilmi\u015f &#8220;RegisterArea&#8221; ad\u0131nda bir metodumuz mevcut.Bu metodumuzun i\u00e7inde, Global.asax dosyam\u0131zdaki gibi, URL Routing i\u015flemleri mevcut.Bu metod sayesinde, &#8220;Yonetim&#8221; ad\u0131ndaki Aria&#8217;m\u0131z\u0131n URL Routing yap\u0131s\u0131 \u015femaland\u0131r\u0131lm\u0131\u015ft\u0131r.Dikkat ederseniz, &#8220;Yonetim\/{controller}\/{action}\/{id}&#8221; sat\u0131r\u0131nda Controller alan\u0131ndan \u00f6nce, Area&#8217;m\u0131z\u0131n ismi yazmaktad\u0131r.<\/p>\n<p>Ama burada dikkat etmemiz gereken bir husus var.&#8221;Yonetim&#8221; ad\u0131ndaki Area&#8217;m\u0131z\u0131n bu URL Routing yap\u0131s\u0131n\u0131 Global.asax dosyas\u0131nda \u00e7al\u0131\u015ft\u0131rmam\u0131z gerekmektedir.Bu i\u015flemi yapabilmek i\u00e7in a\u015fa\u011f\u0131daki kod blo\u011funun Global.asax dosyas\u0131nda bulunan &#8220;Application_Start&#8221; isimli metodda \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131 gerekmektedir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nAreaRegistration.RegisterAllAreas();\r\n\/\/Bu kod, projede ne kadar Aria varsa hepsinin URL Routing \u015femas\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmas\u0131 gerekti\u011fini s\u00f6yler.\r\n<\/pre>\n<p>E\u011fer Global.asax dosyam\u0131z\u0131 a\u00e7arsak, &#8220;Application_Start&#8221; metodunda bu kod par\u00e7ac\u0131\u011f\u0131n\u0131n varsay\u0131lan olarak yaz\u0131ld\u0131\u011f\u0131n\u0131 g\u00f6rece\u011fiz.Yani Visual Studio bu g\u00fczelli\u011fide bize yapmaktad\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n---Global.asax---\r\n...\r\n        protected void Application_Start()\r\n        {\r\n            AreaRegistration.RegisterAllAreas();\r\n            RegisterRoutes(RouteTable.Routes);\r\n        }\r\n...\r\n<\/pre>\n<p>\u015eimdi olu\u015fturdu\u011fumuz bu Area&#8217;n\u0131n \u00e7al\u0131\u015f\u0131p \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131 bir deneyelim.<br \/>\n&#8220;Yonetim&#8221; Area&#8217;m\u0131z i\u00e7inde, Controller katman\u0131na &#8220;AnaSayfa(Controller)&#8221; ad\u0131nda bir s\u0131n\u0131f olu\u015fturdum.Haliyle, &#8220;Index&#8221; metodu varsay\u0131lan olarak geldi.\u015eimdide, View katman\u0131nda &#8220;AnaSayfa&#8221; ad\u0131nda bir klas\u00f6r\u00fcn alt\u0131nda &#8220;Index&#8221; metodunun dosayas\u0131n\u0131 olu\u015fturuyorum.<\/p>\n<p>Projemizin Global.asax dosyas\u0131n\u0131 incelersek e\u011fer, ilk olarak &#8220;Home(Controller)&#8221; alt\u0131ndaki &#8220;Index&#8221; metodunun a\u00e7\u0131laca\u011f\u0131n\u0131 s\u00f6yl\u00fcyor.<span style=\"font-size: x-small;\">(Her projede varsay\u0131lan olarak ilk b\u00f6yledir)<\/span><\/p>\n<p>Projemizi ba\u015flatal\u0131m, &#8220;Home(Controller)&#8221; Controller katman\u0131ndaki, &#8220;Index&#8221; metodu \u00e7al\u0131\u015ft\u0131r\u0131lacak ve View katman\u0131ndaki dosyas\u0131 a\u00e7\u0131lacakt\u0131r.Taray\u0131c\u0131m\u0131z\u0131n adres \u00e7ubu\u011funa, &#8220;http:\/\/localhost:****\/Yonetim\/AnaSayfa&#8221; URL yap\u0131s\u0131nda link girersek e\u011fer, &#8220;Yonetim&#8221; ad\u0131ndaki Area&#8217;m\u0131z\u0131n, &#8220;AnaSayfa(Controller)&#8221; ad\u0131ndaki Controller&#8217;\u0131nda bulunan &#8220;Index&#8221; metodu \u00e7al\u0131\u015ft\u0131r\u0131lm\u0131\u015f olacak ve View katman\u0131ndaki dosyas\u0131 ekranda g\u00f6z\u00fckm\u00fc\u015f olacakt\u0131r.<\/p>\n<p>Bu yaz\u0131m\u0131z\u0131nda sonuna gelmi\u015f bulunmaktay\u0131z.<br \/>\nFaydalanman\u0131z dile\u011fiyle,<br \/>\nBir sonraki yaz\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere..<br \/>\n\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>Asp.NET MVC projelerinde standart dizin mant\u0131\u011f\u0131n\u0131n d\u0131\u015f\u0131nda, daha esnek bir yap\u0131 olu\u015fturmam\u0131z\u0131 sa\u011flayan Area yap\u0131s\u0131n\u0131 inceleyelim.Web projelerimizde kullan\u0131c\u0131lar\u0131n d\u0131\u015f\u0131nda site yetkililerinin g\u00f6rebildi\u011fi administrator(y\u00f6netici) paneli, ya da kullan\u0131c\u0131 rol\u00fcne g\u00f6re ula\u015f\u0131labilen alanlar bulundurmam\u0131z gerekebilir.\u00dczerinde \u00e7al\u0131\u015ft\u0131\u011f\u0131m\u0131z&#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":[314,746,283],"class_list":["post-1159","post","type-post","status-publish","format-standard","hentry","category-asp-net-mvc","tag-area","tag-asp-net-mvc","tag-mvc"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/1159","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=1159"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/1159\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=1159"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=1159"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=1159"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}