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);
        }

}

10 Ekim 2016 Pazartesi

Entity Framework Nedir, Neye benzer, Ne değildir.

Entity Framework üzerine konuşmaya başlamadan önce ORM (object Relation Mapping) kavramının ne olduğunu bir bakmanızda fayda var.

Entity Framework, Microdoft'un runtime'da sorgu hatalarını en aza indirmeyi planladığı ve birçok noktada kolaylık sağlan LINQ (Entity Framework)

Entity Framework, bir ORM araçıdır. Veritabanındaki tablolara doğrudan TSQL sorgularıyla erişip
işlem yapmak yerine, nesneler üzerinden işlem yapmayı sağlar Bu nesneler Entity Model'lerini oluştururlar.

Entity Framework'te veritabanı işlemlerini yönetecek merkezi bir sınıf oluşturulması gerekmektedir. Bu sınıf sayesinde, oluşturulan veri modelleri üzerinden veritabanı işlemleri gerçekleştirilmektedir.

Oluşturacagımız sınıfın, Entity Framework Data Context işlemlerini yapabilmesi için System.Data.Entity.DbContext sınıfının kalıtımını alması gerekmektedir.




ORM (object Relation Mapping) kavramı üzerine notlar.


ORM (object Relation Mapping) veri tabanında oluşan herbir nesneye (tabloya) karşılık uygulama tarafında bir nesne oluşturma işidir. Bu işlem bazı frameworklerde ara yazılımlar sayesinde (ORM Tools), bazı frameworklerde ise elle gerçekleştirilmektedir.

ORM ile CRUD (create,read,update,delete) işlemleri daha kolay yapılmaktadır. Bu işlemler direk ORM üzerinde gerçekleşmektedir.

ORM araçlarının en önemli faydası, kod yazımını kısaltmak veya kolaylaştırmaktan öte, yazılım bakımını kolaylaştırmasıdır. Veri tabanı temelli uygulamalarda, kodun 1/3´ü veri tabanı erişimine yöneliktir. Veri tabanındaki bir kolonunun tipinin değişmesi, yeni bir kolon eklenmesi gibi değişiklikler, bütün veri erişim kodunu tekrar gözden geçirmeyi gerektirir. ORM ile bu gözden geçirmeden çok yüksek oranda tasarruf edilir. ORM kullanılan yazılımlarda, veri tabanındaki değişikliklerde yapılması gereken sadece nesnelerle tabloların birbirine nasıl eşleştirildiğinin (mapping) gözden geçirilmesidir.


MVC - 5 Action Metod İçinde Custom Model Binder Kullanımı

Kendi oluşturduğumuz custom model binder sınıfını Action içerisinde nasıl kullanacağımızı öğrenelim.

Controller Klasörüne sağ tıklayıp yeni bir controller oluşturalım ve adını MEController  yapalım


oluşan index metoduna sağ tıklayıp Add View seçeneğini tıklayarak, Empety (witout Model) olarak bir view oluşturunuz. Ve içerisine aşağıdaki şekilde düzenleyiniz.


Daha sonra [HttpPost]  olarak yeni bir index Action oluşturunuz. Parametre olarak custom model binder kullanılacağı için  öncelikle hangi model binderin kullanılacağını tanımlamamız gerekmektedir.

Bunun için Model Binder Attribute'unu çağırıyoruz.  Attribute'un parametresinde kullanacağımız model binder'in (MEModelBinder) türünü (Type) gönderiyoruz ve devamında model binder'in geridönderdiği veri  türünden olan değişkeni tanımlıyoruz (bu örnekte int).

Index([ModelBinder(typeof(MEModelBinder))] int ID)



View'i çalıştırıp test edebiliriz.


MVC 5 - Kullanıcı Tanımlı (Custom) Model Binder Oluşturma

Varsayılan model binder yerine kime zaman kendi oluşturacağımız model binder'lar yazılım geliştirme sırasında işinizi kolaylaştırabilir.

Projemize ModelBinders adında yeni klasör ekleyip, içerisinde MEModelBinder isminde bir class oluşturalım.

Not: Bir sınıfı model binder olarak tanımlamanın iki yolu vardır.


  1.  Sınıfa, varsayılan olarak model binder olan DefaultModelBinder sınıfının katılımını verebiliriz.
  2. Sınıfa, IModelBinder interface'i implement edebilirsiniz.
Bu örneğimizde IModelBinder  interface'i üzerinde işlem yapacağız. MEModelBinder sınıfına IModelBinder interface'nin kalıtımını veriniz. ardından interface'in BindModel metodunu oluşturunuz.


throw satırını silip kodlamaya başlayabiliriz.

View üzerindeki verilere erişmek için, View'den gelen HttpRequest nesnesine ulaşmamız gerekmektedir. Bu nesneye controllercontext nesnesinin HttpContext özelliğinin Request özelliği ile ulaşıyoruz.


25 Şubat 2016 Perşembe

Sql data types vs c# data types

SQL Server data type
CLR data type (SQL Server)
CLR data type (.NET Framework)
varbinary
SqlBytes, SqlBinary
Byte[]
binary
SqlBytes, SqlBinary
Byte[]
varbinary(1), binary(1)
SqlBytes, SqlBinary
byte, Byte[]
image
None
None
varchar
None
None
char
None
None
nvarchar(1), nchar(1)
SqlChars, SqlString
Char, String, Char[]
nvarchar
SqlChars, SqlString
String, Char[]
nchar
SqlChars, SqlString
String, Char[]
text
None
None
ntext
None
None
uniqueidentifier
SqlGuid
Guid
rowversion
None
Byte[]
bit
SqlBoolean
Boolean
tinyint
SqlByte
Byte
smallint
SqlInt16
Int16
int
SqlInt32
Int32
bigint
SqlInt64
Int64
smallmoney
SqlMoney
Decimal
money
SqlMoney
Decimal
numeric
SqlDecimal
Decimal
decimal
SqlDecimal
Decimal
real
SqlSingle
Single
float
SqlDouble
Double
smalldatetime
SqlDateTime
DateTime
datetime
SqlDateTime
DateTime
sql_variant
None
Object
User-defined type(UDT)
user-defined type
None
table
None
None
cursor
None
None
timestamp
None
None
xml
SqlXml
None


This article is just a reference of SQL Data Types to C# Data Types.

http://uliasz.com/2011/04/sql-data-types-vs-c-data-types/






14 Şubat 2016 Pazar

İTİRAZIN İKİ ŞARTI (Nevzat Çelik)



çok olmadığımız kesin
çok olan tarafta değiliz
çok olan tarafta olmayacağız
türkiye’de kürt olacağız
kürtlerde ermeni
ermenilerde süryani
gidip almanya’da türk olacağız
hollanda’da surinamlı
fransa’da cezayirli
iran’da azeri
amerika’da zifiri zenci olacağız
çoğalan zencide mutlaka kızılderili
israil’de filistinli
köpeğin karşısında kedi
kedinin karşısında kuş olacağız
kuşun karşısında börtü böcek
hakemler hep karşı takımı tutacak
ve biz hep yedi kişiyle tamamlayacağız maçı
çiçeklerden kamelya olacağız
az kolumuzun tarafında
solda olacağız
bu itirazın ilk şartı

solda da az olacağız
devrimi çoğaltırken çünkü
bir başka devrime hızla azalacağız
bu da itirazın ikinci şartı.