MVC’de Create Metodu
Bir önceki, MVC’de Details Metodu başlıklı yazımızda MVC’de detay(Details) işlemlerini görmüştük.Bu yazımızda ise, Create metodunu, yani ekleme işlemini göreceğiz.
Dikkat !!!
Bu yazımızı anlamanız için bir önceki yazımızı detaylı bir biçimde okumanız gerekmektedir.Yazı dizisi oluşturduğumdan dolayı, bir yazı önceki ve sonrakiyle bağlantılı şekilde örneklendirilmiştir.
Anımsarsanız eğer bir önceki yazımızda neler yapmıştık onlardan bahsedelim.”Ogrenci(Controller)” adındaki Controller sınıfımızda bulunan, ActionResult tipinden olan “Details” isimli metodumuzu kullanarak, listelettiğimiz öğrencilerin detaylarını hazırlamıştık.Bu yazımızda ise, oluşturduğumuz bu listeye bir veri ekleme işlemi yapacağız.
Öncelikle, üzerinde çalıştığımız projemizi açıp, projemizi başlatalım.Adres çubuğuna “http://localhost:****/Ogrenci” benzer ifademizi girelim.Açılan sayfada aşağıdaki gibi, varsayılan tasarımdan ötürü gelen bir “Create New” linki mevcuttur.
Bu link üzerine geldiğimizde tarayıcının sol alt tarafında ” http://localhost:****/Ogrenci/Create” URL sini göreceğiz.Bu linkin açıklaması neydi.”Ogrenci” adındaki Controller sınıfının içindeki “Create” adındaki ActionResult tipinden metodu temsil ediyor(çalıştırıyor).
Birde Controller katmanımızdaki “Ogrenci(Controller)” sınfımızdaki “Create” metoduna bir göz atalım.
//1.Metod
public ActionResult Create()
{
return View();
}
//2.Metod
[HttpPost]
public ActionResult Create(FormCollection collection)
{
try
{
return RedirectToAction("Index");
}
catch
{
return View();
}
}
Gördüğünüz gibi, iki adet Create isminde overload metod mevcut.Şimdi buradaki hususu iyi okumanızı tavsiye ederim.
Create metodu ile yeni bir ekleme işlemi yapacağımız zaman(örneğimizde öğrenci ekleyeceğiz), ekleyeceğimiz elemanın nesnesini üretip bunu kullanıcıya göndertmemiz gerekiyor.Bu işlem sonucunda, gönderdiğimiz bu nesnenin gerekli alanlarını kullanıcı doldurup geri bize post etmesi gerekiyor.
Yukarıda isimlendirdiğim 1.Metod adındaki Create metodu, “Create New” linkine tıkladığı zaman önce çalışacaktır.Bu metod çalıştığı ekleme işlemi yapılacak nesne üretilecek ve bu kullanıcıya gönderilecektir.Daha sonra kullanıcı gerekli alanları doldurduktan sonra post işlemi yapacaktır ve 2.Metod adındaki Create metodumuz çalışıp, gerekli ekleme işlemlerini halledecektir.
[HttpPost]
Attribute’u form tarafından post tipinden bir Action oluştuğu zaman, 2.Metod ismindeki Create metodunun çalışacağını söylemektedir.
Şimdi bahsettiğimiz gibi öncelikle, kullanıcının dolduracağu nesnemizi 1.Metod adındaki Create overloadında oluşturup, bu nesneyi View katmanına göndermeliyiz.
public ActionResult Create()
{
Ogrenci o = new Ogrenci();
return View(o);
}
Gördüğünüz gibi, 1.Metod adındaki Create metodunda Ogrenci tipinden bir nesne oluşturduk ve kullanıcının bu nesnedeki gerekli alanlara bilgi girmesi için nesnemizi View katmanına gönderdik.
Bu işlemi yaptıktan sonra, Create metodumuza sağ tıklayıp “Add View” seçeneğini seçelim ve gelen pencereden aşağıdaki gibi ayarlar yaptıktan sonra Add seçeneğine tıklayalım.

Ekleme işlemi yapacağımız için “View content” bölümünden Create seçeneğini seçmeyi unutmayınız.
Bu işlem sonucunda oluşan Create.aspx sayfasının kaynak kodları aşağıdaki gibi olacaktır.
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<Calisma.Models.Ogrenci>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Create
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Create</h2>
<% using (Html.BeginForm()) {%>
<%: Html.ValidationSummary(true) %>
<fieldset>
<legend>Fields</legend>
<div class="editor-label">
<%: Html.LabelFor(model => model.ID) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.ID) %>
<%: Html.ValidationMessageFor(model => model.ID) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Adi) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.Adi) %>
<%: Html.ValidationMessageFor(model => model.Adi) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.SoyAdi) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.SoyAdi) %>
<%: Html.ValidationMessageFor(model => model.SoyAdi) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Yasi) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.Yasi) %>
<%: Html.ValidationMessageFor(model => model.Yasi) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Sinifi) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.Sinifi) %>
<%: Html.ValidationMessageFor(model => model.Sinifi) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.SinifHocasi) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.SinifHocasi) %>
<%: Html.ValidationMessageFor(model => model.SinifHocasi) %>
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
<% } %>
<div>
<%: Html.ActionLink("Back to List", "Index") %>
</div>
</asp:Content>
Eğer projemizi çalıştırıp tarayıcımıza “http://localhost:****/Ogrenci/” benzer bir link girerek, karşımıza gelen pencereden “Create New” linkine tıkladığımızda, ekran görüntüsü aşağıdaki gibi olacaktır.

Şimdi ise, 2.Metod ismindeki Create overloadını inceleyelim.Daha detaylı incelemek için bu metodu aşağıya tek olarak alıyorum.
[HttpPost]
public ActionResult Create(FormCollection collection)
{
try
{
return RedirectToAction("Index");
}
catch
{
return View();
}
}
Öncelikle buraya kadar mekanizmamızın çalışma mantığını bir izleyelim.1.Metod adındaki Create overloadı ile oluşturulan Ogrenci tipindeki nesnemiz kullanıcıya gönderildi ve gerekli alanlarına kullanıcı tarafından veriler doldurtturuldu.
Kullanıcı gerekli verileri girdikten sonra, Create butonuna tıklayacak, bizim oluşturup gönderdiğimiz Ogrenci nesnesini alanları doldurulmuş bir şekilde 2.Metod ismindeki Create metoduna geri gönderecektir.[HttpPost] attribute u bu metodun post işlemi sonucunda devreye gireceğini gösteriyor.
Gelen nesneyi, 2.Metod isimli Create overloadı FormCollection tipinden olan “collection” ismindeki parametre yakalayacaktır.Mantıken biz kullancıya bir Ogrenci tipinden bir nesne göndermiştik.Eee haliyle kullanıcıda bize o nesneyi, verileri yerleştirilmiş bir şekilde geri gönderdi.Yani, piyasada bir tane Ogrenci nesnesi mevcutken, Create FormCollection tipinden parametreyle bu nesneyi yakalayacağıma, direkt Ogrenci tipinden parametreyle yakalarım daha iyi.
O halde ben 2.Metod isimli Create overloadını, Ogrenci tipinden parametre alan bir metod haline getiriyorum.
[HttpPost]
public ActionResult Create(Ogrenci ogrenci)
{
try
{
return RedirectToAction("Index");
//Index adındaki Action'a yönlendir.
}
catch
{
return View();
}
}
Gördüğünüz gibi Ogrenci tipinden “ogrenci” adında bir parametre alan metod haline getirdim.Artık bizim, Ogrenci tipindeki nesnemizi bu parametre yakalayacaktır.Şimdi ise bu Ogrenci tipinden nesnemizi Ogrenci tipinden List koleksiyonumuza atabiliriz.
[HttpPost]
public ActionResult Create(Ogrenci ogrenci)
{
try
{
List<Ogrenci> Ogrencilerimiz = Session["Ogrenciler"] as List<Ogrenci>;
Ogrencilerimiz.Add(ogrenci);
return RedirectToAction("Index");
}
catch
{
return View();
}
}
Artık projemizi çalıştırdıktan sonra, “Create New” linkine gelerek gerekli alanlara gerekli bilgileri girdikten sonra Create butonuna tıklayarak, verilerimizin listeye eklendiğini göreceğiz.
Bu yazımızda MVC’de Create işlemi nasıl yapılır görmüş olduk.Faydalanmanız dileğiyle,
Bir sonraki yazımda görüşmek üzere..
İyi çalışmalar…
