Bu yazımda MVC ortamında actiona parametre olarak geçireceğiniz DateTime nesnesinin formatını nasıl değiştireceğinizden bahsedeceğim.
Bu hususta bir çok yöntem olsa da yine nesnel bir çözüm en temizi oluyor. Konu ModelBinder kapsamında. ModelBinder nesnesi olası bir modelin clientten yazılım ortamına geçerken nasıl ve neye göre alınacağını belirliyor. Standartta MVC framework yazıları, sayıları vs sıkıntısız alabiliyor. Ancak tarihle ilgili bir sıkıntı yaşamamak elde değil. Tarih formatları malumunuz server ayarları ile alınıp verilmekte. Eğer farklı bir culture sahipseniz (TR gibi) formatı elle yakalamanız gerekir. Projenize bir sınıf oluşturun aşağıdaki gibi
public class DateTimeBinder: IModelBinder { public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { string key = bindingContext.ModelName; ValueProviderResult result = bindingContext.ValueProvider.GetValue(key); if (result == null) { return null; } return result.ConvertTo(typeof(DateTime?), System.Globalization.CultureInfo.CurrentCulture); } }
Yukarıda ki formatlama işlemi DateTime? (nullable olan) için yapılmıştır, projemde tarihleri Nullable kullandığım için. Siz isterseniz DateTime direk kullanabilirsiniz. Her ne ise. Bu sınıfı oluşturduktan sonra (System.Web.MVC usinge eklemeyi unutmayın) ikinci adımda da bu sınıfı MVC ortamına tanıtmak gerekiyor. Hemen Global.asax altında bulunan Application_Start fonksiyonunun içine şu kodu yerleştirin.
ModelBinders.Binders[typeof(DateTime?)] = new DateTimeBinder();
Tekrar hatırlatmam gerek benim ihtiyacım DateTime? siz classta ne tanımlamışsanız aynı tiple eşleştirmelisiniz. Artık projeniz gün.ay.yıl formatında tarihleri kabul edecektir. Unutmadan Web.Config’de Culture ayarı TR yapılmalı.
Esenlikle…
Bir cevap yazın