16 Ekim 2016 Pazar

MVC - Action ve Model Attributes (Nitelikler)



Action Name (Action İsmi) : Action metodunun, oluşturulduğundan farklı bir isimlede çağrılması gerektiği durumlarda bu özellik ile action metodu parametrelerde tanımlanan isimle çağırabiliriz.

HttpPost (View'den controller'a veri gönderme ) : Tanımlandığı action metodun, view'daki formdan post işlemiyle ulaşılabilmesini sağlayan attribute'tur.

HttpGet (View'den controller'a veri gönderme ) : Tanımlandığı action metodun, view'daki formdan post işlemiyle ulaşılabilmesini sağlayan attribute'tur.
- Parametrede gönderilen  değerler querystring'te (link üzerinde) bulunduğu için get işlemi kullanılır.

Bind (View'dan alınacak verilerilerin kontrolü) : Tanımlandığı model sınıfında view'dan verilerin hangilerinin alınıp alınmayacağı tanımlanır. Parametrede Include kullanırsanız, tanımlanan özelliklerdeki (property) veriler alınırken diğer property'lerdeki veriler alınmaz. Exclude kullanırsanız, tanımlanan özellikerin dışındaki veriler alırnırken, tanımlanan property'lerdi veriler alınmaz.

OutputCache (Önbellekleme) :  

RequireHttps (Https protokolünü zorunlu kılma) :


13 Ekim 2016 Perşembe

MVC - Action ve Action Metodları - Kullanımı



Action Nedir ?

Asp.Net MVC projelerinde, kullanıcı arayüzleri (View'lar) içindeki bilgilerin controller sınıfları içinde yönetildiği  metodlardır. Action metodlaryla View'e veri gönderme, View'ı çalıştırma, View'ın formu içindeki bilgileri alma ve veritabanına kaydetme gibi bir çok işlem gerçekleştirilmektedir.

Action metodların geri döndürebileceği veri türleri.

1.ActionResult :

public class PagesController : Controller
{

  WEBSiteContext DBConnection = new WEBSiteContext();

  public ActionResult Ekle()
  {
   return View();
  }

}

2.RedirectResult : Sayfa yönlendirme

public class PagesController : Controller
{

  WEBSiteContext DBConnection = new WEBSiteContext();

public ActionResult Ekle()
{
  return View();
}

[HttpPost]
public RedirectResult Ekle (Pages NewData)
{
  DBConnection.Pages.Add(NewData);
  DBConnection.SaveChanges();
  return Redirect("http://www.ahmetcelik.com.tr");
}

}

3.JsonResult : Json sonucu döndürme

public class PagesController : Controller
{

  WEBSiteContext DBConnection = new WEBSiteContext();

public ActionResult Ekle()
{
  return View();
}

[HttpPost]
public RedirectResult Ekle (Pages NewData)
{
  DBConnection.Pages.Add(NewData);
  DBConnection.SaveChanges();
  return Redirect("http://www.ahmetcelik.com.tr");
}

[HttpPost]
public JsonResult ListeleJson()
{
 var Pages = DBConnection.Pages.ToList();
 return Json(Pages);
}

}

4. FileResult : Dosya dönderme

Not: En çok kullanılan geri dönüş türleri (Sınıflar) FilePathResult, FileStreamResult


public class PagesController : Controller
{

  WEBSiteContext DBConnection = new WEBSiteContext();

public ActionResult Ekle()
{
  return View();
}

[HttpPost]
public RedirectResult Ekle (Pages NewData)
{
  DBConnection.Pages.Add(NewData);
  DBConnection.SaveChanges();
  return Redirect("http://www.ahmetcelik.com.tr");
}

[HttpPost]
public JsonResult ListeleJson()
{
 var Pages = DBConnection.Pages.ToList();
 return Json(Pages);
}

public FileResult PageInfo()
{
 string _MeFilePath =Server.MapPath("/UploadFiles/xxx.pdf");
 string _MeFileType = "application/pdf";
 return new FilePathResult (_MeFilePath, _MeFileType);
}

}


5. RedirectToRouteResult : Farklı bir action metoda yönlendirme

public class PagesController : Controller
{

WEBSiteContext DBConnection = new WEBSiteContext();

public ActionResult Ekle()
{
  return View();
}

[HttpPost]
public RedirectResult Ekle (Pages NewData)
{
  DBConnection.Pages.Add(NewData);
  DBConnection.SaveChanges();
  return Redirect("http://www.ahmetcelik.com.tr");
}

[HttpPost]
public JsonResult ListeleJson()
{
 var Pages = DBConnection.Pages.ToList();
 return Json(Pages);
}

public FileResult PageInfo()
{
 string _MeFilePath =Server.MapPath("/UploadFiles/xxx.pdf");
 string _MeFileType = "application/pdf";
 return new FilePathResult (_MeFilePath, _MeFileType);
}

public RedirectToRouteResult MeRedirect(Pages NewData)
{
  DBConnection.Pages.Add(NewData);
  DBConnection.SaveChanges();
  return new RedirectToRouteResult (new RouteValueDictionary(new {action = "PageInfo", controller = "Pages"}));
}

}

6. PartialViewResult : Partial View Döndürme


public class PagesController : Controller
{

WEBSiteContext DBConnection = new WEBSiteContext();

public ActionResult Ekle()
{
  return View();
}

[HttpPost]
public RedirectResult Ekle (Pages NewData)
{
  DBConnection.Pages.Add(NewData);
  DBConnection.SaveChanges();
  return Redirect("http://www.ahmetcelik.com.tr");
}

[HttpPost]
public JsonResult ListeleJson()
{
 var Pages = DBConnection.Pages.ToList();
 return Json(Pages);
}

public FileResult PageInfo()
{
 string _MeFilePath =Server.MapPath("/UploadFiles/xxx.pdf");
 string _MeFileType = "application/pdf";
 return new FilePathResult (_MeFilePath, _MeFileType);
}


public RedirectToRouteResult MeRedirect(Pages NewData)
{
DBConnection.Pages.Add(NewData);
DBConnection.SaveChanges();

return new RedirectToRouteResult (new RouteValueDictionary(new {action = "PageInfo", controller = "Pages"}));
}
public PartialViewResult MeContent (int ID)
{
   var _MeContents = (from b in DBConnection.Contents where b.PID == ID select b).ToList();
            
  return PartialView(_MeContents);

}

}

7. JavaScriptResult : Javascript döndürme

MVC-5 Action'dan Farklı İsimde View Çağırma




KURAL : Bir view'ın çalıştırılabilmesi (View'a tarayıcı üzerinden erişilebilmesi ) için View'ın, Controller içersinde Action'nın tanımlanması gerekmektedir. Bu tanımla yapılmadı ise, oluşturacağınız view'ı çalıştıramazsınız.



KURAL : Tarayıcı üzerinden bir link çalıştırıldığında, linki ControllerAdı/ActionAdı  şeklinde yazmanız gerekmektedir. Sunucuya gelen istekler öncelikle Controller'a ulaşacağı için, istemci tarafından (client-tarayıcıdan gelen) isteklerin hangi Controller'a (ControllerAdı) ve Controller içindeki hangi Action metoduna (ActionAdı) gideceği bilgisi, linkten alınmaktadır. Bu sebeple oluşturulan bir view'ı birdan fazla  Action metoduna tanımlayıp taracı üzerinden çalıştırabiliriz.

public class ContentController : Controller
    {
        
        public ActionResult Listele()
        {
            return View(ContentData.Contents);
        }


        public ActionResult Ekle()
        {
            
            return View();
        }

        [HttpPost] //Attribute
        public ActionResult  Ekle(Content NewContent)
        {

            if (ModelState.IsValid)
            {
                ContentData.Contents.Add(NewContent);
                return RedirectToAction("Listele");
            }
            else
            {
                return View();
            }
        }

        public ActionResult Duzenle(int ID)
        {
            var content = ContentData.Contents.Where(o => o.ID == ID).FirstOrDefault();

            return View(content);
        }
        [HttpPost]
        public ActionResult Duzenle(Content content)
        {
            Content EditContent = ContentData.Contents.Where(o => o.ID == content.ID).FirstOrDefault();

            EditContent.CName = content.CName;
            EditContent.CSummary = content.CSummary;
            EditContent.CInfo = content.CInfo;
            EditContent.CDate = content.CDate;
            EditContent.CNumber = content.CNumber;

            return RedirectToAction("Listele");
        }

        public ActionResult Sil(int ID)
        {
            var content = ContentData.Contents.Where(o => o.ID == ID).FirstOrDefault();
            return View(content);
        }

        [HttpPost]
        public ActionResult Sil(Content content)
        {
            Content DeleteContent = ContentData.Contents.Where(o => o.ID == content.ID).FirstOrDefault();
            ContentData.Contents.Remove(DeleteContent);
            return RedirectToAction("Listele");
        }

        public ActionResult Detay(int ID)
        {
            var content = ContentData.Contents.Where(o => o.ID == ID).FirstOrDefault();
            return View(content);
        }

}