MVC’de Details,Create,Edit,Delete Metodları
Bu yazı dizimizde MVC projemizde Controller oluştururken “Add action methods for Create, Update, Delete and Details scenarios” ifadesinden bahsedelim.
Bu yazı dizimizde, bu güne kadar bahsettiğim MVC konularımızı kapsayan, ayrıntılı ve teferruatlı bir örnek şeması çizeceğiz.Artık konularımız derinleştikçe algılamamız ve diğer yapılarla bütünlük kurabilmemiz için derin ve kompleks örneklerle yazılarımı işlemekten çekinmeyeceğim.
Asıl konumuza dönersek eğer, bu yazıdan itibaren bir yol belirtip, yazı dizimiz boyunca bu yol üzerinden devam edeceğim.
Öncelikle Asp.NET MVC konularımızda veritabanı ile işlem yapmayı görmediğimizden dolayı bu yazı dizimde Model katmanında oluşturduğumuz bir Entity ile, o Entity sınıfının tipinden olan bir List koleksiyonu üzerinden çalışacağım.
Evet artık konumuzu incelemeye başlayabiliriz.Bir Asp.NET MVC projesi oluşturup, “Ogrenci(Controller)” adında bir Controller sınıfı oluşturalım.Eee haliyle bu yazının ana konusu olan “Add action methods for Create, Update, Delete and Details scenarios” ifadesini işaretlemeyi unutmayalım.
public class OgrenciController : Controller
{
//
// GET: /Ogrenci/
public ActionResult Index()
{
return View();
}
//
// GET: /Ogrenci/Details/5
public ActionResult Details(int id)
{
return View();
}
//
// GET: /Ogrenci/Create
public ActionResult Create()
{
return View();
}
//
// POST: /Ogrenci/Create
[HttpPost]
public ActionResult Create(FormCollection collection)
{
try
{
// TODO: Add insert logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
//
// GET: /Ogrenci/Edit/5
public ActionResult Edit(int id)
{
return View();
}
//
// POST: /Ogrenci/Edit/5
[HttpPost]
public ActionResult Edit(int id, FormCollection collection)
{
try
{
// TODO: Add update logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
//
// GET: /Ogrenci/Delete/5
public ActionResult Delete(int id)
{
return View();
}
//
// POST: /Ogrenci/Delete/5
[HttpPost]
public ActionResult Delete(int id, FormCollection collection)
{
try
{
// TODO: Add delete logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
}
Oluşturduğumuz “Ogrenci(Controller)” adındaki Controller’ımızı açarsak eğer, yukarıdaki kodları göreceğiz.Dikkat ederseniz eğer, Index,Details,Create,Edit ve Delete adında beş adet ActionResult tipinden metod ve bazılarının overload hali eklenmiştir.
Bu metodlardan biraz bahsetmek gerekirse eğer,
Index : Bir Controller oluşturduğumuz zaman varsayılan olarak eklenen metod.
Details : Detay işlevi görmektedir.
Create : Oluşturma, ekleme gibi işlemler için işlev görmektedir.
Edit : Düzenleme işlevi görmektedir.
Delete : Silme işlevi görmektedir.
Bu dizinin her bir yazısında bir metod ele alınacaktır.Bu dersimizde Index metodundan bahsedeceğiz.Önceden Index metodumuzda Model katmanındaki sınıfımızdaki bir elemanın bilgisini gösteriyorduk.Şimdi bir listeleme(tablolama) işlemi yapalım.
Bu işlemi yapabilmek için Model katmanında “Ogrenci” adında bir sınıf oluşturalım.(Bu sınıf içinde ID,Adi,SoyAdi,Yasi,Sinifi ve SinifHocasi adında propertyler eklensin.)
namespace Calisma.Models
{
public class Ogrenci
{
public int ID { get; set; }
public string Adi { get; set; }
public string SoyAdi { get; set; }
public int Yasi { get; set; }
public int Sinifi { get; set; }
public string SinifHocasi { get; set; }
public Ogrenci()
{ }
public Ogrenci(int ID, string Adi, string SoyAdi, int Yasi, int Sinifi, string SinifHocasi)
{
this.ID = ID;
this.Adi = Adi;
this.SoyAdi = SoyAdi;
this.Yasi = Yasi;
this.SinifHocasi = SinifHocasi;
this.Sinifi = Sinifi;
}
}
}
Şimdi bu Model katmanındaki “Ogrenci” sınıfına “Ogrenci(Controller)” adındaki Controller’ımızdan ulaşmak istiyorsak eğer, bu Model katmanını Controller’ımızın kütüphanesine eklememiz gerekiyor.
--- OgrenciController.cs --- using Calisma.Models;
Şimdi “Ogrenci(Controller)” sınıfımızda Index metodunu ele alırsak eğer, listeleme(tablolama) işlemi yapacağımızdan dolayı, veritabanı üzerinden çalışmadığımız için Ogrenci tipinden List koleksiyonu oluşturacağım ve bu koleksiyonun içine Ogrenci nesneleri atacağım.
(Not !!! Konumuza değinirken, örnekleri bu şekilde pratiğe çevirmek biraz konuyu kompleksleştirmiş olabilir.Ancak temel C#, Asp.NET bilgisi olanlar bu konuda sıkıntı yaşamayacaklardır.)
public ActionResult Index()
{
if (Session["Ogrenciler"] == null)
{
List<Ogrenci> Ogrenciler = new List<Ogrenci>() {
new Ogrenci(1,"Gençay","Yıldız",21,2,"Emrah Çelebi"),
new Ogrenci(2,"Ahmet","Yıldırım",19,1,"Ali Fuat Göksu"),
new Ogrenci(3,"Fatih","Yıldız",22,3,"Mehmet Ali Elçevik")
};
Session["Ogrenciler"] = Ogrenciler;
return View(Ogrenciler);
}
else
{
return View(Session["Ogrenciler"] as List<Ogrenci>);
}
}
Yukarıda gördüğünüz gibi “Index” adındaki metodumuzun içeriğini yazdık ve sonuçları View katmanına gönderdik.Kodlardan biraz söz etmek gerekirse, Ogrenci tipinden bir List koleksiyonu oluşturduk ve bu koleksiyon içine üç adet Ogrenci nesnesi yerleştirip, bu koleksiyonumuzu “Ogrenciler” adında bir Session nesnemize attık.Gerekli Session önlemlerinden sonra haliyle son olarak bu koleksiyonumuzu View katmanına gönderdik.
Şimdi Index metodumuza sağ tıklayarak Add View diyelim ve bu metodumuzun View katmanında dosyasını oluşturalım.

Gördüğünüz gibi, Index metodumuzun View dosyasını oluştururken, listeleme yapacağımız için “View content” bölümünden “List” seçeneğini seçiyoruz.
Aşağıda Index.aspx sayfasının kaynak kodları mevcuttur.
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<Calisma.Models.Ogrenci>>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Index
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Index</h2>
<table>
<tr>
<th></th>
<th>
ID
</th>
<th>
Adi
</th>
<th>
SoyAdi
</th>
<th>
Yasi
</th>
<th>
Sinifi
</th>
<th>
SinifHocasi
</th>
</tr>
<% foreach (var item in Model) { %>
//Model artık içinde bir List koleksiyon taşımakta olduğundan dolayı direkt olarak foreach döngüsünde kullanılıyor.
<tr>
<td>
<%: Html.ActionLink("Edit", "Edit", new { id = item.ID}) %> |
<%: Html.ActionLink("Details", "Details", new { id = item.ID })%> |
<%: Html.ActionLink("Delete", "Delete", new { id = item.ID })%>
//Burada id parametresine her nesnenin ID değerini verdim.
</td>
<td>
<%: item.ID %>
</td>
<td>
<%: item.Adi %>
</td>
<td>
<%: item.SoyAdi %>
</td>
<td>
<%: item.Yasi %>
</td>
<td>
<%: item.Sinifi %>
</td>
<td>
<%: item.SinifHocasi %>
</td>
</tr>
<% } %>
</table>
<p>
<%: Html.ActionLink("Create New", "Create") %>
</p>
</asp:Content>
Index.aspx sayfasının kaynak kodlarında gördüğünüz bu yapı ve tasarım, şimdiki projemizde varsayılan olarak gelmektedirler.İlerideki yazılarımda bu tasarım ve yapıları kendimiz belirleyip oluşturabileceğiz.
Projemizi bu haliyle çalıştırıp, adres çubuğuna “http://localhost:****/Ogrenci” ifadesini yazarsak eğer, aşağıdaki görüntü karşımıza gelecektir.

Bu yazımızında sonuna gelmiş bulunmaktayız.
Bir sonraki yazılarımda görüşmek üzere..
İyi Çalışmalar..

