﻿
{"id":4570,"date":"2016-06-26T17:58:28","date_gmt":"2016-06-26T17:58:28","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=4570"},"modified":"2016-06-26T17:58:28","modified_gmt":"2016-06-26T17:58:28","slug":"asp-net-mvc-programatik-olarak-cshtml-dosyasini-render-etmek","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/asp-net-mvc-programatik-olarak-cshtml-dosyasini-render-etmek\/","title":{"rendered":"Asp.NET MVC &#8211; Programatik Olarak .cshtml Dosyas\u0131n\u0131 Render Etmek"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bu yaz\u0131m\u0131zda Asp.NET MVC mimarisinde programatik olarak PartialView(.cshtml) dosyalar\u0131n\u0131n nas\u0131l render edildi\u011fini irdeleyece\u011fiz.<\/p>\n<p>Tabi konuya girmeden \u00f6nce dilerseniz e\u011fer bir View dosyas\u0131n\u0131n normal yollarla nas\u0131l render edildi\u011fini tekrardan inceleyelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class HomeController : Controller\r\n    {\r\n        public ActionResult Index()\r\n        {\r\n            NorthwindEntities Veri = new NorthwindEntities();\r\n            var Personeller = Veri.Personeller.ToList();\r\n            return View(Personeller);\r\n        }\r\n    }\r\n<\/pre>\n<p>Yukar\u0131daki gibi bir Controller s\u0131n\u0131f\u0131nda herhangi bir Action metotda g\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere model View&#8217;e g\u00f6nderilmektedir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n@model IEnumerable&lt;WebApplication1.Models.Personeller&gt;\r\n&lt;table class=&quot;table&quot;&gt;\r\n    &lt;tr&gt;\r\n        &lt;th&gt;\r\n            @Html.DisplayNameFor(model =&gt; model.SoyAdi)\r\n        &lt;\/th&gt;\r\n        &lt;th&gt;\r\n            @Html.DisplayNameFor(model =&gt; model.Adi)\r\n        &lt;\/th&gt;\r\n        &lt;th&gt;\r\n            @Html.DisplayNameFor(model =&gt; model.Unvan)\r\n        &lt;\/th&gt;\r\n        &lt;th&gt;&lt;\/th&gt;\r\n    &lt;\/tr&gt;\r\n\r\n    @foreach (var item in Model)\r\n    {\r\n        &lt;tr&gt;\r\n            &lt;td&gt;\r\n                @Html.DisplayFor(modelItem =&gt; item.SoyAdi)\r\n            &lt;\/td&gt;\r\n            &lt;td&gt;\r\n                @Html.DisplayFor(modelItem =&gt; item.Adi)\r\n            &lt;\/td&gt;\r\n            &lt;td&gt;\r\n                @Html.DisplayFor(modelItem =&gt; item.Unvan)\r\n            &lt;\/td&gt;\r\n        &lt;\/tr&gt;\r\n    }\r\n&lt;\/table&gt;\r\n<\/pre>\n<p>View&#8217;de model yukar\u0131daki gibi kar\u015f\u0131lan\u0131p render edilmektedir.<\/p>\n<p>Normal d\u00fczeyde olay\u0131m\u0131z bu kadar basit&#8230;<\/p>\n<p><strong>Peki bu i\u015flemi programatik olarak nas\u0131l yapaca\u011f\u0131z?<\/strong> sorusuna gelirsek e\u011fer a\u015fa\u011f\u0131daki Helper s\u0131n\u0131f\u0131n\u0131 inceleyiniz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class Helper\r\n    {\r\n        public static string RazorViewRender(object model, string filePath)\r\n        {\r\n            var sw = new StringWriter();\r\n            var context = new HttpContextWrapper(HttpContext.Current);\r\n            var routeData = new RouteData();\r\n            var controllerContext = new ControllerContext(new RequestContext(context, routeData), new HomeController());\r\n            var razor = new RazorView(controllerContext, filePath, null, false, null);\r\n            razor.Render(new ViewContext(controllerContext, razor, new ViewDataDictionary(model), new TempDataDictionary(), sw), sw);\r\n            return sw.ToString();\r\n        }\r\n    }\r\n<\/pre>\n<p>Olu\u015fturmu\u015f oldu\u011fumuz bu Helper s\u0131n\u0131f\u0131 verilen modeli verilen filePathe g\u00f6ndermekte, render etmekte ve sonucuda string olarak d\u00f6nd\u00fcrmektedir.<\/p>\n<p>Haliyle a\u015fa\u011f\u0131daki \u00f6rnek kullan\u0131m alanlar\u0131na misal te\u015fkil edebilir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class HomeController : Controller\r\n    {\r\n        public ActionResult Index()\r\n        {\r\n            NorthwindEntities Veri = new NorthwindEntities();\r\n            var Personeller = Veri.Personeller.ToList();\r\n\r\n            ViewBag.Render = Helper.RazorViewRender(Personeller, &quot;~\/Views\/Home\/_PersonelListesi.cshtml&quot;);\r\n\r\n            return View();\r\n        }\r\n    }\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n---- _PersonelListesi.cshtml\r\n@model IEnumerable&lt;WebApplication1.Models.Personeller&gt;\r\n&lt;table class=&quot;table&quot;&gt;\r\n    &lt;tr&gt;\r\n        &lt;th&gt;\r\n            @Html.DisplayNameFor(model =&gt; model.SoyAdi)\r\n        &lt;\/th&gt;\r\n        &lt;th&gt;\r\n            @Html.DisplayNameFor(model =&gt; model.Adi)\r\n        &lt;\/th&gt;\r\n        &lt;th&gt;\r\n            @Html.DisplayNameFor(model =&gt; model.Unvan)\r\n        &lt;\/th&gt;\r\n        &lt;th&gt;&lt;\/th&gt;\r\n    &lt;\/tr&gt;\r\n    @foreach (var item in Model)\r\n    {\r\n        &lt;tr&gt;\r\n            &lt;td&gt;\r\n                @item.Adi\r\n            &lt;\/td&gt;\r\n            &lt;td&gt;\r\n                @item.SoyAdi\r\n            &lt;\/td&gt;\r\n            &lt;td&gt;\r\n                @item.Unvan\r\n            &lt;\/td&gt;\r\n        &lt;\/tr&gt;\r\n    }\r\n&lt;\/table&gt;\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n-- Index.cshtml\r\n@if (ViewBag.Render != null)\r\n{\r\n    @Html.Raw(ViewBag.Render);\r\n}\r\n<\/pre>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, Index Action metodu i\u00e7erisinde Helper s\u0131n\u0131f\u0131m\u0131zda yazm\u0131\u015f oldu\u011fumuz RazorViewRender metodu arac\u0131l\u0131\u011f\u0131yla _PersonelListesi.cshtml dosyas\u0131 verilen model ile render edilmekte ve bir ViewBag.Render kontrol\u00fcne at\u0131lmaktad\u0131r. Haliyle Index.cshtml&#8217;de bu ViewBag.Render kontrol\u00fc \u00e7a\u011fr\u0131lmakta ve html olarak ekrana bas\u0131lmaktad\u0131r.<\/p>\n<p>Olu\u015fturmu\u015f oldu\u011fumuz bu Helper s\u0131n\u0131f\u0131 sayesinde Asp.NET MVC projelerinde arka planda PartialView&#8217;leri render ederek, yeri ve zaman\u0131 geldimi jQuery &#8211; Ajax yap\u0131lar\u0131 e\u015fli\u011finde bu yorumlar\u0131 kullanabiliriz. Vee buna benzer daha nice \u00e7al\u0131\u015fmalar ger\u00e7ekle\u015ftirebiliriz&#8230;<\/p>\n<p>Okudu\u011funuz i\u00e7in te\u015fekk\u00fcr ederim&#8230;<br \/>\nSonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar dilerim&#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>Merhaba, Bu yaz\u0131m\u0131zda Asp.NET MVC mimarisinde programatik olarak PartialView(.cshtml) dosyalar\u0131n\u0131n nas\u0131l render edildi\u011fini irdeleyece\u011fiz. Tabi konuya girmeden \u00f6nce dilerseniz e\u011fer bir View dosyas\u0131n\u0131n normal yollarla nas\u0131l render edildi\u011fini tekrardan inceleyelim. public class HomeController :&#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":3453,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11],"tags":[746,283,1269,1271,1270,1268],"class_list":["post-4570","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-asp-net-mvc","tag-asp-net-mvc","tag-mvc","tag-programatik","tag-razorview","tag-razorviewrender","tag-render"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/4570","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=4570"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/4570\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/3453"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=4570"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=4570"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=4570"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}