ডেটটাইম মডেল বৈশিষ্ট্যের সাথে সংক্ষিপ্ত তারিখের ফর্ম্যাট বাধ্যতামূলকভাবে আমি একই সমস্যাটি করছি। অনেকগুলি বিভিন্ন উদাহরণ দেখার পরে (কেবলমাত্র ডেটটাইম সম্পর্কিত নয়) আমি ফলউইউং একসাথে রেখেছি:
using System;
using System.Globalization;
using System.Web.Mvc;
namespace YourNamespaceHere
{
public class CustomDateBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
if (controllerContext == null)
throw new ArgumentNullException("controllerContext", "controllerContext is null.");
if (bindingContext == null)
throw new ArgumentNullException("bindingContext", "bindingContext is null.");
var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
if (value == null)
throw new ArgumentNullException(bindingContext.ModelName);
CultureInfo cultureInf = (CultureInfo)CultureInfo.CurrentCulture.Clone();
cultureInf.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy";
bindingContext.ModelState.SetModelValue(bindingContext.ModelName, value);
try
{
var date = value.ConvertTo(typeof(DateTime), cultureInf);
return date;
}
catch (Exception ex)
{
bindingContext.ModelState.AddModelError(bindingContext.ModelName, ex);
return null;
}
}
}
public class NullableCustomDateBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
if (controllerContext == null)
throw new ArgumentNullException("controllerContext", "controllerContext is null.");
if (bindingContext == null)
throw new ArgumentNullException("bindingContext", "bindingContext is null.");
var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
if (value == null) return null;
CultureInfo cultureInf = (CultureInfo)CultureInfo.CurrentCulture.Clone();
cultureInf.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy";
bindingContext.ModelState.SetModelValue(bindingContext.ModelName, value);
try
{
var date = value.ConvertTo(typeof(DateTime), cultureInf);
return date;
}
catch (Exception ex)
{
bindingContext.ModelState.AddModelError(bindingContext.ModelName, ex);
return null;
}
}
}
}
গ্লোবাল এএসএএক্স ফাইলগুলিতে যেভাবে রুটগুলি ইত্যাদি নিয়ন্ত্রিত হয় তা ধরে রাখতে আমি আমার এমভিসি 4 প্রকল্পের কাস্টমমডেলবিন্ডার কনফিগ নামের অ্যাপ্লিকেশন স্টার্ট ফোল্ডারে একটি নতুন সিট্যাটিক ক্লাস যুক্ত করেছি:
using System;
using System.Web.Mvc;
namespace YourNamespaceHere
{
public static class CustomModelBindersConfig
{
public static void RegisterCustomModelBinders()
{
ModelBinders.Binders.Add(typeof(DateTime), new CustomModelBinders.CustomDateBinder());
ModelBinders.Binders.Add(typeof(DateTime?), new CustomModelBinders.NullableCustomDateBinder());
}
}
}
আমি তখনই আমার গ্লোবাল এএসএএসএক্স অ্যাপ্লিকেশন_স্টার্ট থেকে স্ট্যাটিক রেজিস্টারকাস্টমমডেলবাইন্ডারগুলিকে এভাবে কল করি:
protected void Application_Start()
{
/* bla blah bla the usual stuff and then */
CustomModelBindersConfig.RegisterCustomModelBinders();
}
এখানে একটি গুরুত্বপূর্ণ নোটটি হ'ল আপনি যদি কোনও হিডফিল্ডে ডেটটাইম মানটি লিখেন তবে:
@Html.HiddenFor(model => model.SomeDate) // a DateTime property
@Html.Hiddenfor(model => model) // a model that is of type DateTime
আমি এটি করেছি এবং পৃষ্ঠায় আসল মানটি "এমডি / ডিডি / ইয়াই এইচ: মিমি: এসএসটি টি" এর পরিবর্তে "ডিডি / এমএম / ইয়াই এইচ: মিমি: এসএসটি টিটি" ফর্ম্যাটে ছিল আমার মতো। এর ফলে আমার মডেল বৈধতাটি হয় হয় ব্যর্থ হয় বা ভুল তারিখটি ফিরে আসে (স্পষ্টতই দিন এবং মাসের মানগুলি অদলবদল করে)।
প্রচুর মাথার স্ক্র্যাচিং এবং ব্যর্থ চেষ্টার পরে সমাধানটি হ'ল গ্লোবাল.এএসএক্সে প্রতিটি অনুরোধের জন্য সংস্কৃতি সম্পর্কিত তথ্য সেট করা:
protected void Application_BeginRequest()
{
CultureInfo cInf = new CultureInfo("en-ZA", false);
// NOTE: change the culture name en-ZA to whatever culture suits your needs
cInf.DateTimeFormat.DateSeparator = "/";
cInf.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy";
cInf.DateTimeFormat.LongDatePattern = "dd/MM/yyyy hh:mm:ss tt";
System.Threading.Thread.CurrentThread.CurrentCulture = cInf;
System.Threading.Thread.CurrentThread.CurrentUICulture = cInf;
}
আপনি এটি অ্যাপ্লিকেশন_স্টার্ট বা এমনকি সেশন_সত্তায় আটকে থাকলে এটি কাজ করবে না যেহেতু এটি সেশনের জন্য এটি বর্তমান থ্রেডকে নির্ধারণ করে। আপনি যেমন জানেন যে ওয়েব অ্যাপ্লিকেশনগুলি রাজ্যহীন তাই আপনার অনুরোধটি আগে যে থ্রেডটি প্রস্থান করেছিল তা হ'ল একই থ্রেডটি আপনার বর্তমান অনুরোধটি পরিবেশন করছে তাই আপনার সংস্কৃতি তথ্য ডিজিটাল আকাশের দুর্দান্ত জিসিতে চলে গেছে।
ধন্যবাদ এখানে যান: ইভান জ্লেতেভ - http://ivanz.com/2010/11/03/custom-model-b ਬਾਈ্যান্ডিং- ইউজিং- আইমোডেলবিন্দার- ইন- এএসপি- নেট- এমভিসি- টো- গোটচস /
গারিক - https://stackoverflow.com/a/2468447/578208
দিমিত্রি - https://stackoverflow.com/a/11903896/578208