Is it possible to set a mask for MaskedEditExtender for the date format MMM-yyyy that would work in any culture?
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; }
Could you set the mask dynamically by using something like this?
string shortDateFormat =
System.Globalization.CultureInfo.DateTimeFormat.ShortDatePattern
精彩评论