The problem I'm having, as the title says, is that I need to use the short month name format with the year for Dates being validated by a MaskedEditExtender from the AjaxControlToolkit. MMM-yyyy for a DateTime is not the same as MaskedEditExtender.Mask = "LLL-9999".
If I use en-US locale, the thing works like charm, but if I switch to fr-FR then It won't work because the short month representation in French uses between 4 and 5 letters (including dot).
Any ideas on this? Thanks.
Here you need to define the mask and mask type explicitly instead of declaring in the control itself.
Follow the steps
1. Create a method to get n set mask
public string Mask
{
get
{
return GetPropertyValue("Mask", "");
}
set
{
SetPropertyValue("Mask", value);
}
}
2. Create a method to get n set mask type
public MaskedEditType MaskType
{
get
{
return GetPropertyValue("MaskType", MaskedEditType.None);
}
set
{
SetPropertyValue("MaskType", value);
AcceptAMPM = false;
AcceptNegative = MaskedEditShowSymbol.None;
DisplayMoney = MaskedEditShowSymbol.None;
InputDirection = MaskedEditInputDirection.LeftToRight;
break;
}
}
3. Create a method to get the culture and culture date format
public string CultureName
{
get
{
return GetPropertyValue("Culture", "");
}
set
{
try
{
if (!String.IsNullOrEmpty(value))
{
System.Globalization.CultureInfo CultControl = System.Globalization.CultureInfo.GetCultureInfo(value);
SetPropertyValue("Culture", CultControl.Name);
CultureDatePlaceholder = CultControl.DateTimeFormat.DateSeparator;
char sep = System.Char.Parse(CultControl.DateTimeFormat.DateSeparator);
string[] arrDate = CultControl.DateTimeFormat.ShortDatePattern.Split(sep);
string ret = arrDate[0].Substring(0, 1).ToUpper(CultControl);
ret += arrDate[1].Substring(0, 1).ToUpper(CultControl);
ret += arrDate[2].Substring(0, 1).ToUpper(CultControl);
CultureDateFormat = ret;
}
else
{
SetPropertyValue("Culture", "");
CultureDatePlaceholder = "";
}
}
catch
{
throw new ArgumentException("The Culture is invalid!");
}
}
}
4. Create a method to get the culture date format
public string CultureDateFormat
{
get
{
return GetPropertyValue("CultureDateFormat", "");
}
set
{
SetPropertyValue("CultureDateFormat", value);
}
}
5. Now load the value on pre render
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
switch (MaskType)
{
case MaskedEditType.Date:
{
AcceptAMPM = false;
AcceptNegative = MaskedEditShowSymbol.None;
DisplayMoney = MaskedEditShowSymbol.None;
InputDirection = MaskedEditInputDirection.LeftToRight;
break;
}
}
System.Globalization.CultureInfo CultControl = System.Globalization.CultureInfo.CurrentCulture;
if (!String.IsNullOrEmpty(CultureName))
{
CultControl = System.Globalization.CultureInfo.GetCultureInfo(CultureName);
}
CultureDatePlaceholder = CultControl.DateTimeFormat.DateSeparator;
char sep = System.Char.Parse(CultControl.DateTimeFormat.DateSeparator);
string[] arrDate = CultControl.DateTimeFormat.ShortDatePattern.Split(sep);
string ret = arrDate[0].Substring(0, 1).ToUpper(CultControl);
ret += arrDate[1].Substring(0, 1).ToUpper(CultControl);
ret += arrDate[2].Substring(0, 1).ToUpper(CultControl);
CultureDateFormat = ret;
}
6. Last create a function to validate the user input
private bool validateMaskType()
{
string mask = Mask;
MaskedEditType maskType = MaskType;
if (!string.IsNullOrEmpty(mask) && (maskType == MaskedEditType.Date))
{
string validMask = MaskedEditCommon.GetValidMask(mask);
switch (maskType)
{
case MaskedEditType.Date:
return Array.IndexOf(new string[] { "99/99/9999", "99/9999/99", "9999/99/99", "99/99/99" }, validMask) >= 0;
break;
}
}
return true;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With