﻿
{"id":983,"date":"2012-11-20T21:47:24","date_gmt":"2012-11-20T21:47:24","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=983"},"modified":"2019-02-08T21:21:59","modified_gmt":"2019-02-08T21:21:59","slug":"asp-net-mvc-controlleraction-ve-view-ekleme","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/asp-net-mvc-controlleraction-ve-view-ekleme\/","title":{"rendered":"Asp.NET MVC Controller,Action ve View Ekleme"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Bir Asp.NET MVC projesinde Controller nas\u0131l olu\u015fturulur.Bu Controller ile ili\u015fkili View katman\u0131nda klas\u00f6r ve bu klas\u00f6r i\u00e7indeki View elemanlar\u0131 ad\u0131nda Controller s\u0131n\u0131f\u0131m\u0131zda ActionResult tipinden metodlar nas\u0131l olu\u015fturulur bunlar\u0131 inceleyelim.<\/p>\n<p>Ben Visual Studio&#8217;dan &#8220;TestProje&#8221; ad\u0131nda bir Asp.NET MVC 2 Web Application projesi olu\u015fturuyorum.<\/p>\n<p>\u00d6ncelikle Controller s\u0131n\u0131f\u0131n\u0131n nas\u0131l olu\u015fturulaca\u011f\u0131n\u0131 g\u00f6relim.<br \/>\nSolution Explorer penceresinden, Controllers klas\u00f6r\u00fcn\u00fc sa\u011f t\u0131klayarak, Controller se\u00e7ene\u011fine t\u0131klayal\u0131m.Kar\u015f\u0131m\u0131za \u00e7\u0131kan pencere a\u015fa\u011f\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fc gibi olacakt\u0131r.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/11\/ControllerIsmi.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-944\" title=\"ControllerIsmi\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/11\/ControllerIsmi.png\" alt=\"\" width=\"484\" height=\"194\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/11\/ControllerIsmi.png 484w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/11\/ControllerIsmi-300x120.png 300w\" sizes=\"auto, (max-width: 484px) 100vw, 484px\" \/><\/a><br \/>\nBildi\u011fimiz gibi Controller katman\u0131nda olu\u015fturdu\u011fumuz herhangi bir Controller&#8217;\u0131n ad\u0131n\u0131n sonuna &#8220;Controller&#8221; tag\u0131n\u0131 getirme mecburiyetindeyiz.Visual Studio derleyicisi bize bu konuda yard\u0131mc\u0131 olmaktad\u0131r.Controller eklerken isim girilecek yeri se\u00e7ili getirip sonuna &#8220;Controller&#8221; tag\u0131n\u0131 ekli bir \u015fekilde getirmektedir.<\/p>\n<p>Ben \u00f6rnek olarak Controller Name k\u0131sm\u0131na &#8220;BenimKontrolumController&#8221; ad\u0131nda bir de\u011fer giriyorum.<\/p>\n<p>&#8220;Add action methods for Create, Update, Delete and Details scenarios&#8221;, bu ifade onay kutucu\u011funda yer almaktad\u0131r.Olu\u015fturma, g\u00fcncelleme, silme ve detay i\u00e7in Action metodlar\u0131n bu Controller&#8217;a eklensinmi eklenmesinmi sormaktad\u0131r.<\/p>\n<p>Ben \u015fimdilik onay kutucu\u011funu i\u015faretlemiyorum ve Add butonuna t\u0131kl\u0131yorum.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class BenimKontrolumController : Controller\r\n    {\r\n        public ActionResult Index()\r\n        {\r\n            return View();\r\n        }\r\n    }\r\n<\/pre>\n<p>&#8220;BenimKontrolumController.cs&#8221; ad\u0131ndaki Controller&#8217;\u0131m\u0131z Controller katman\u0131na eklenmi\u015ftir ve i\u00e7indeki kodlar yukar\u0131daki gibidir.\u0130ncelersek e\u011fer ActionResult tipinde &#8220;Index&#8221; ad\u0131nda bir metodumuz mevcut ve bu metod View katman\u0131na d\u00f6n\u00fc\u015f yapmaktad\u0131r.<\/p>\n<p>Prensip gere\u011fi Controller ad\u0131nda View katman\u0131nda klas\u00f6r bulunmal\u0131yd\u0131.Bu klas\u00f6r i\u00e7inde Controller&#8217;\u0131m\u0131zda bulunan ActionResult tipindeki &#8220;Index&#8221; ad\u0131ndaki metod isminde dosya bulunmal\u0131yd\u0131.Bu Controller&#8217;\u0131 biz yeni olu\u015fturdu\u011fumuz i\u00e7in View katman\u0131nda bu isimde bir klas\u00f6r mevcut de\u011fil ve b\u00f6yle bir klas\u00f6r olmad\u0131\u011f\u0131ndan dolay\u0131 &#8220;Index&#8221; ad\u0131nda bir dosyam\u0131zda mevcut de\u011fil.<\/p>\n<p>View katman\u0131ndaki klas\u00f6r\u00fc ve bu klas\u00f6r i\u00e7indeki dosyay\u0131 olu\u015fturman\u0131n iki y\u00f6ntemi mevcuttur.Biri Visual Studio sayesinde, bir di\u011feri ise el ile..<\/p>\n<p>\u00d6ncelikle manuel olarak elimizle View katman\u0131nda Controller ismindeki klas\u00f6r\u00fcm\u00fcz\u00fc olu\u015fturup, sonra Controller&#8217;\u0131m\u0131z i\u00e7indeki ActionResult tipinden &#8220;Index&#8221; isimli metodumuzun isminden dosya olu\u015ftural\u0131m.<\/p>\n<p>\u00d6ncelikle Solution Explorer&#8217;a gelip, Views klas\u00f6r\u00fcne sa\u011f t\u0131klayarak Add diyoruz ve New Folder se\u00e7ene\u011fine t\u0131kl\u0131yoruz.Eklenen klas\u00f6re Controller&#8217;\u0131m\u0131z\u0131n ismi olan &#8220;BenimKontrolum&#8221; ad\u0131n\u0131 veriyoruz.<\/p>\n<p>Sonra &#8220;BenimKontrolum&#8221; ad\u0131ndaki klas\u00f6re sa\u011f t\u0131klayarak, Add diyoruz ve View se\u00e7ene\u011fini se\u00e7iyoruz.<\/p>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/11\/view-2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-988\" title=\"view 2\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/11\/view-2.png\" alt=\"\" width=\"430\" height=\"426\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/11\/view-2.png 430w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/11\/view-2-150x150.png 150w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/11\/view-2-300x297.png 300w\" sizes=\"auto, (max-width: 430px) 100vw, 430px\" \/><\/a><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/11\/view-2.png\"><br \/>\n<\/a><br \/>\nA\u00e7\u0131lan penceredeki alanlardan bahsedecek olursak e\u011fer,<\/p>\n<ul>\n<li>View name alan\u0131na Controller&#8217;\u0131m\u0131zla ayn\u0131 isimde olu\u015fturaca\u011f\u0131m\u0131z klas\u00f6r\u00fcn ad\u0131n\u0131 yaz\u0131yoruz.<\/li>\n<li>&#8220;Creata a partial view (.ascx)&#8221; yazan kutucukta ise, bu olu\u015fturulacak sayfa bir aspx sayfas\u0131m\u0131 yoksa ascx sayfas\u0131m\u0131 olsun diye soruyor.<\/li>\n<li>&#8220;Create a strongly-typed view&#8221; yazan kutucukta ise, Model katman\u0131yla alakal\u0131 bir mevzu var.E\u011fer benim bu sayfada Model&#8217;larla ilgili bir i\u015flem yapmam gerekiyorsa bu kutucu\u011fu onaylar, daha sonra alttaki &#8220;View data class&#8221; yazan alandan ilgili model class\u0131n\u0131 se\u00e7mem gerekiyor.<\/li>\n<li>&#8220;Select master page&#8221; alan\u0131nda ise, bu sayfam\u0131z hangi Masterpage sayfas\u0131n\u0131 kullanacak onu belirtiyoruz.<\/li>\n<li>&#8220;ContentPlaceHolder ID&#8221; alan\u0131nda ise, bu sayfa se\u00e7ili Masterpage deki hangi ContentPlaceHolder&#8217;\u0131 kullanacak ID de\u011ferini yaz\u0131p belirtiyoruz.<\/li>\n<\/ul>\n<p>Penceredeki alanlar\u0131n \u00f6zelliklerinden bahsettikten sonra gelelim bizim nas\u0131l bir sayfa olu\u015fturdu\u011fumuza.<br \/>\nView name alan\u0131na, \u00a0&#8220;BenimKontrolumController&#8221; ad\u0131ndaki Controller&#8217;\u0131m\u0131z\u0131n i\u00e7inde bulunan ActionResult tipinden &#8220;Index&#8221; ad\u0131ndaki metodun View katman\u0131ndaki sayfas\u0131n\u0131 olu\u015fturaca\u011f\u0131m\u0131z i\u00e7in, &#8220;Index&#8221; yaz\u0131yoruz ve Add butonuna t\u0131kl\u0131yoruz.<\/p>\n<p>Olu\u015fturulan Index.aspx ad\u0131ndaki sayfam\u0131z\u0131n kaynak kodlar\u0131 a\u015fa\u011f\u0131da g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibidir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n&lt;%@ Page Title=&quot;&quot; Language=&quot;C#&quot; MasterPageFile=&quot;~\/Views\/Shared\/Site.Master&quot; Inherits=&quot;System.Web.Mvc.ViewPage&lt;dynamic&gt;&quot; %&gt;\r\n&lt;asp:Content ID=&quot;Content1&quot; ContentPlaceHolderID=&quot;TitleContent&quot; runat=&quot;server&quot;&gt;\r\n\tIndex\r\n&lt;\/asp:Content&gt;\r\n&lt;asp:Content ID=&quot;Content2&quot; ContentPlaceHolderID=&quot;MainContent&quot; runat=&quot;server&quot;&gt;\r\n\u00a0 \u00a0 &lt;h2&gt;Index&lt;\/h2&gt;\r\n&lt;\/asp:Content&gt;\r\n<\/pre>\n<p>\u015eimdi &#8220;BenimKontrolumController.cs&#8221; ad\u0131ndaki Controller s\u0131n\u0131f\u0131m\u0131zdan ili\u015fkisi oldu\u011fu View katman\u0131ndaki &#8220;BenimKontrolum&#8221; ad\u0131ndaki klas\u00f6r\u00fcn i\u00e7indeki Index dosyas\u0131na bir veri g\u00f6nderelim.Tabi bu veriyi, Controller&#8217;\u0131m\u0131zdaki &#8220;Index&#8221; ad\u0131ndaki ActionResult tipindeki metod ile g\u00f6nderece\u011fiz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        public ActionResult Index()\r\n        {\r\n            ViewData&#x5B;&quot;Mesaj&quot;] = &quot;Merhaba, bu benim Controller'\u0131mdan g\u00f6nderilen de\u011ferdir.&quot;;\r\n            return View();\r\n        }\r\n<\/pre>\n<p>Yukar\u0131da g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi &#8220;BenimKontrolumController&#8221; ad\u0131ndaki Controller&#8217;a gelip ActionResult tipinden olan &#8220;Index&#8221; ad\u0131ndaki metodumuza ViewData ile veri ta\u015f\u0131tt\u0131r\u0131yoruz.Bu veriyi View katman\u0131ndaki Index.aspx sayfas\u0131nda a\u015fa\u011f\u0131daki gibi okuyabiliyoruz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n&lt;%@ Page Title=&quot;&quot; Language=&quot;C#&quot; MasterPageFile=&quot;~\/Views\/Shared\/Site.Master&quot; Inherits=&quot;System.Web.Mvc.ViewPage&lt;dynamic&gt;&quot; %&gt;\r\n&lt;asp:Content ID=&quot;Content1&quot; ContentPlaceHolderID=&quot;TitleContent&quot; runat=&quot;server&quot;&gt;\r\n\tIndex\r\n&lt;\/asp:Content&gt;\r\n&lt;asp:Content ID=&quot;Content2&quot; ContentPlaceHolderID=&quot;MainContent&quot; runat=&quot;server&quot;&gt;\r\n    &lt;h2&gt;Index&lt;\/h2&gt;\r\n    &lt;p&gt;Gelen de\u011fer = &lt;%:ViewData&#x5B;&quot;Mesaj&quot;] %&gt;&lt;\/p&gt;\r\n&lt;\/asp:Content&gt;\r\n<\/pre>\n<p>E\u011fer bu \u015fekilde projeyi \u00e7al\u0131\u015ft\u0131r\u0131p adres \u00e7ubu\u011funa &#8220;http:\/\/localhost:3163\/BenimKontrolum\/Index&#8221; URL sini girersek, a\u015fa\u011f\u0131daki gibi ekran gelecektir.<\/p>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/11\/ekran.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/11\/ekran.png\" alt=\"\" title=\"ekran\" width=\"561\" height=\"239\" class=\"aligncenter size-full wp-image-990\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/11\/ekran.png 561w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/11\/ekran-300x127.png 300w\" sizes=\"auto, (max-width: 561px) 100vw, 561px\" \/><\/a><\/p>\n<p>Eee el ile Controller&#8217;\u0131m\u0131za uygun View katman\u0131nda klas\u00f6r ve dosya olu\u015fturduk.\u015eimdi s\u0131ra Visual Studio program\u0131 ile bu i\u015flemi ger\u00e7ekle\u015ftirmek.<\/p>\n<p>\u00d6ncelikle yeni bir Controller olu\u015ftural\u0131m.Ben ad\u0131na &#8220;Yeni(Controller)&#8221; ismini vermekteyim.\u015euanda olu\u015fturdu\u011fumuz bu Controller&#8217;\u0131n View katman\u0131nda ne klas\u00f6r\u00fcn\u00fc olu\u015fturduk, ne de Index ad\u0131ndaki Action&#8217;\u0131 i\u00e7in klas\u00f6rdeki Index.aspx dosyas\u0131n\u0131.Bu dosyalar\u0131 Visual Studio derleyicisine olu\u015fturttural\u0131m.<\/p>\n<p>&#8220;Yeni(Controller)&#8221; ad\u0131nda olu\u015fturulan Controller&#8217;\u0131m\u0131z\u0131n kod sayfas\u0131na gelirsek e\u011fer, varsay\u0131lan olarak &#8220;Index&#8221; ad\u0131nda ActionResult tipindeki metodumuz i\u00e7inde gelmektedir.\u0130\u015fte bu metodumuza sa\u011f t\u0131klayarak Add View dersek e\u011fer direkt olarak Index metodunun sayfas\u0131n\u0131 olu\u015fturma ekran\u0131 gelecektir ve otomatik olarak View name b\u00f6l\u00fcm\u00fcne &#8220;Index&#8221; ismini girecektir.E\u011fer Add dersek, View katman\u0131nda &#8220;Yeni&#8221; ad\u0131nda klas\u00f6r olu\u015fturulacak ve bu klas\u00f6r alt\u0131na Index.aspx dosyas\u0131 eklenecektir.A\u015fa\u011f\u0131daki resmi inceleyiniz.<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/11\/metod.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/11\/metod.png\" alt=\"\" title=\"metod\" width=\"633\" height=\"162\" class=\"aligncenter size-full wp-image-993\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/11\/metod.png 633w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/11\/metod-300x76.png 300w\" sizes=\"auto, (max-width: 633px) 100vw, 633px\" \/><\/a><br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/11\/solution.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/11\/solution.png\" alt=\"\" title=\"solution\" width=\"221\" height=\"132\" class=\"aligncenter size-full wp-image-995\" \/><\/a><\/p>\n<p>E\u011fer Index haricinde kendi iste\u011fimize g\u00f6re bir Action eklemek istiyorsak e\u011fer, Controller&#8217;\u0131m\u0131za gelip o ActionResult tipindeki metodu yazmam\u0131z gerekmektedir.(Son olu\u015fturdu\u011fumuz YeniController \u00fczerinden \u00f6rnek g\u00f6sterece\u011fim.)<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class YeniController : Controller\r\n    {\r\n\/\/ Varsay\u0131lan Index ad\u0131ndaki metod\r\n        public ActionResult Index()\r\n        {\r\n            return View();\r\n        }\r\n\/\/Benim yazd\u0131\u011f\u0131m Bey ad\u0131n\u0131 verdi\u011fim metod\r\n        public ActionResult Ben()\r\n        { \r\n            return View();\r\n        }\r\n    }\r\n<\/pre>\n<p>Evet g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi ActionResult tipinden metodumuzu Controller&#8217;\u0131m\u0131z da olu\u015fturduk.Ben bu metoda &#8220;Ben&#8221; ad\u0131n\u0131 verdim.\u015eimdi yapmam\u0131z gereken View katman\u0131nda bu metod isminde bir dosya olu\u015fturmak.YeniController ismindeki Controller \u00fczerinden \u00e7al\u0131\u015ft\u0131\u011f\u0131m\u0131z i\u00e7in View katman\u0131na &#8220;Yeni&#8221; klas\u00f6r\u00fc \u00f6nceden eklenmi\u015fti.Biz &#8220;Ben&#8221; ad\u0131ndaki dosyay\u0131 &#8220;Yeni&#8221; ad\u0131ndaki klas\u00f6re ister manuel olarak ekleyebilir, istersekte Visual Studio arac\u0131l\u0131\u011f\u0131yla ekletebiliriz.Ben bu yaz\u0131m\u0131 fazla uzatmamas\u0131 i\u00e7in Visual Studio ile y\u00fcklemeyi tercih ediyorum.<\/p>\n<p>Bu yaz\u0131da anlatt\u0131\u011f\u0131m gibi, metodumuza sa\u011f t\u0131klay\u0131p Add View dersek e\u011fer, metodumuzun View katman\u0131ndaki sayfas\u0131n\u0131 olu\u015fturmu\u015f olaca\u011f\u0131z.<\/p>\n<p>Bu yaz\u0131m\u0131z\u0131n sonunada gelmi\u015f bulunmaktay\u0131z.Bir sonraki yaz\u0131m\u0131z da bu yaz\u0131daki ayn\u0131 projede Action metodlar\u0131 \u00fczerinde parametre kullan\u0131m\u0131ndan bahsedece\u011fiz.<\/p>\n<p>\u015eimdilik g\u00f6r\u00fc\u015fmek \u00fczere,<br \/>\n\u0130yi \u00c7al\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>Bir Asp.NET MVC projesinde Controller nas\u0131l olu\u015fturulur.Bu Controller ile ili\u015fkili View katman\u0131nda klas\u00f6r ve bu klas\u00f6r i\u00e7indeki View elemanlar\u0131 ad\u0131nda Controller s\u0131n\u0131f\u0131m\u0131zda ActionResult tipinden metodlar nas\u0131l olu\u015fturulur bunlar\u0131 inceleyelim. Ben Visual Studio&#8217;dan &#8220;TestProje&#8221; ad\u0131nda&#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":[287,746,285,283,120],"class_list":["post-983","post","type-post","status-publish","format-standard","hentry","category-asp-net-mvc","tag-action","tag-asp-net-mvc","tag-controller","tag-mvc","tag-view"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/983","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=983"}],"version-history":[{"count":2,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/983\/revisions"}],"predecessor-version":[{"id":10373,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/983\/revisions\/10373"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=983"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=983"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=983"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}