Reputation: 7013
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.
Upvotes: 5
Views: 1937
Reputation: 839
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; }
Upvotes: 1
Reputation: 3454
Could you set the mask dynamically by using something like this?
string shortDateFormat =
System.Globalization.CultureInfo.DateTimeFormat.ShortDatePattern
Upvotes: 0