Можно ли установить маску для MaskedEditExtender для формата даты МММ-гггг, которая будет работать в любой культуре? - PullRequest
5 голосов
/ 16 сентября 2011

Проблема, с которой я сталкиваюсь, как следует из названия, заключается в том, что мне нужно использовать формат короткого названия месяца, в котором год для дат проверяется с помощью MaskedEditExtender из AjaxControlToolkit. МММ-гггг для DateTime отличается от MaskedEditExtender.Mask = "LLL-9999".

Если я использую локали en-US, то это работает как шарм, но если я переключусь на fr-FR, то это не сработает, потому что в представлении короткого месяца на французском языке используются от 4 до 5 букв (включая точку).

Есть идеи по этому поводу? Спасибо.

Ответы [ 2 ]

1 голос
/ 09 ноября 2011
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;
            }

0 голосов
/ 25 сентября 2011

Не могли бы вы установить маску динамически, используя что-то вроде этого?

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