mehmetduran.com - Paylaşmak Güzeldir...
Asp.net MVC'de Özel ActionResult Oluşturma
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.
Bookmark and Share
Bu Yazıyı Değerlendirin.
Konuyla İlgili Olabilecek Diğer Yazılar Asp.net ile Resim Üzerine Çoklu Yazı Yazma (Generic Handler ile de Gösterme) MVC ile Link İşlemleri (Html.ActionLink, Url.Action ve Özel Metot Oluşturma) Kullandığım Email Sınıfı (Çoklu Mail ve Dosya Gönderimi) Neler Yapıyorum, Yapacağım? Asp.net MVC ile İlgili Birkaç Bilgi
Yorumlar
Yorum Yaz
RSS Yorum Takibi
zülküf küçüközer 05 Eylül Cumartesi 2009 23:09 #1
Bu yöntem site haritası dışında PDF , dosya gibi özel istekler için de kullanılmasının uygun olduğunu düşünüyorum. Aklıma ilk gelen JSON result idi fakat bunu zaten düşünmüşler. :)
Mehmet Duran 06 Eylül Pazar 2009 00:43 #2
Standart olarak gelen türlerde tüm işlemler gerçekleştirilir diye düşünüyorum. Ancak bazı işlemler zahmetli olabilir. Ancak yazacağımız özel türler ile bunu yapabiliriz. Hem dosya için hem de Json için standart olan sonuçlar var. Ancak ihtiyaca göre bunları yeniden gözden geçirebiliriz.
mustafa genco 04 Nisan Pazartesi 2011 00:02 #3
bu nedir kodlardan başka ne yazılmış? hiç...
Mehmet Duran 08 Nisan Cuma 2011 22:57 #4
@mustafa, ne bekliyordun acaba?
İsim :
Site :
Yorum :

Buradan bu yazıya ait yorumları RSS olarak takip edebilirsiniz.

Bu servis ile yazılara eklenen yorumları RSS ile takip ederek konu ile ilgili başkaları tarafından yapılan yorumları veya konuyla ilgili sorduğunuz sorulara verilen cevapları görebilirsiniz.
Gençken bilgi ağacını dikmesek, yaşlandığımız zaman gölgesine sığınacak bir yerimiz olmayacaktır.
Bölümler
Yazılar
Arşiv
Arama
Linkler
Site İçi Arama
Son Zamanlarda Ne Yapıyorum ?
İstatistikler - Araçlar - Reklam
İstatistikler
Sayaç
Mehmet Duran | mehmetduran.com | Copyright © 2009