Bu yazımda MVC'de özel bir ActionResult tanımlamayı ve kullanmayı göstermeye çalışacağım. ActionResult'lar Action metotların dönderebileceği sonuçlardır ve MVC ile oluşturduğumuz projede tüm işlemleri gerçekleştiren bölüm Action bölümüdür. Bu yüzden MVC ile uğraşırken en çok zaman vereceğimiz bölüm Action metotlar olabilir. Bu bölümü kolaylaştırmak ve esneklik kazandırmak için özel olarak ActionResult türleri tanımlayabilir ve kullanabiliriz.
Buradaki yazımda MVC ile gelen standart sonuç türlerini belirtmiştim. Şimdi ise ihtiyaçlarımıza göre özel olarak sonuç türü oluşturup kullanmaya bakalım.
İşimizi kolaylaştırması için bu yöntemi çok kez kullanabiliriz. Örnek verecek olursak, Sitemap sonucu üreten bir sonuç türü (örnek kodları vereceğim), RSS sonucu üreten bir sonuç türü, UserControl veya başka bir kontrolü render eden bir sonuç türü yazıp kullanmak projelerimizi daha anlaşılır, daha kolay bir hale getirir.
Şimdi vereceğim örnekte bloğumda da kullandığım ve
burada paylaştığım Sitemap sınıfını kullanarak Sitemap sonucu üreten bir sonuç türü oluşturup bunu kullanacağız.
Öncelikle türü oluşturmak için yazacağımız kodlara bakalım.
// Yazacağımız özel Sonuç Class'ı
public class SitemapResult : ActionResult
{
private List<SitemapItem> Veriler { get; set; }
private string ContentType { get; set; }
public SitemapResult(List<SitemapItem> veriler)
{
this.Veriler = veriler;
}
public SitemapResult(List<SitemapItem> veriler, string ContentType)
{
this.Veriler = veriler;
this.ContentType = ContentType;
}
public override void ExecuteResult(ControllerContext context)
{
Sitemap sitemap = new Sitemap(Veriler);
context.HttpContext.Response.ContentType = (ContentType == null) ? ("text/xml") : (ContentType);
context.HttpContext.Response.Write(sitemap.SitemapSonuc());
}
}
Görüldüğü gibi
ActionResult sınıfını inherit eden (kalıtım olayı) bir sınıf oluşturuyoruz. Yazdığımız sınıfın Result olabilmesi için örnekte verdiğim gibi
ActionResult sınıfını veya
buradaki yazımda belirttiğim ActionResult türleri olan sınıflardan birini inherit etmeli. Kalıtım olayından sonra ise bu sonucu çalıştıracak olan
ExecuteResult metodunu overload etmeli ve kendi ihtiyaçlarımıza göre sonucu oluşturmalıyız.
Yazmış olduğumuz bu sonuç türünü ise aşağıdaki gibi kullanabiliyoruz.
// Yazdığımız özel Sonuç türünden Bir Action Metot
public ActionResult SiteMap()
{
List<SitemapItem> veriler = new List<SitemapItem>()
{
new SitemapItem(){ loc = "http://mehmetduran.com", lastmod = DateTime.Now, changefreq = "daily", priority = "1" }
};
return new SitemapResult(veriler);
}
// Bir başka kullanımı
public SitemapResult SiteMap()
{
List<SitemapItem> veriler = new List<SitemapItem>()
{
new SitemapItem(){ loc = "http://mehmetduran.com", lastmod = DateTime.Now, changefreq = "daily", priority = "1" }
};
return new SitemapResult(veriler, "text/xml");
}
İşlerimizi daha kolay daha anlaşılır yapmak için bu şekilde sonuçlar oluşturmalı ve kullanmalıyız.
İyi Çalışmalar.