有没有可能为任何文化设置日期格式为MMM-yyyy的MaskedEditExtender掩码?

5
我遇到的问题,正如标题所说,是我需要在被AjaxControlToolkit的MaskedEditExtender验证的日期中使用短月份名称格式和年份。 DateTime的MMM-yyyy与MaskedEditExtender.Mask =“LLL-9999”不同。
如果我使用en-US语言环境,这个东西就像魅力一样工作,但如果我切换到fr-FR,则它将无法工作,因为法语中的短月表示使用4到5个字母(包括点)。
对此有什么想法吗? 谢谢。
2个回答

1
在此,您需要明确定义掩码和掩码类型,而不是在控件本身中声明。
按照以下步骤操作:
1. 创建一个方法来获取n个设置掩码 public string Mask { get { return GetPropertyValue("Mask", ""); } set {
SetPropertyValue("Mask", value); } }
2. 创建一个方法来获取n个设置掩码类型 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. 创建一个方法来获取文化和文化日期格式 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. 创建一个方法来获取文化日期格式 public string CultureDateFormat { get { return GetPropertyValue("CultureDateFormat", ""); } set { SetPropertyValue("CultureDateFormat", value); } }
5. 现在在预渲染时加载值 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. 最后创建一个函数来验证用户输入 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; }

0

你能否通过类似这样的方式动态设置掩码?

string shortDateFormat = 
  System.Globalization.CultureInfo.DateTimeFormat.ShortDatePattern

之前试过,但是不行,因为它使用的格式与那些模式不同。 - Tute

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接