Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 358
Tute Avatar asked Nov 13 '22 17:11

Tute


1 Answers

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;
            }

like image 50
AnandMohanAwasthi Avatar answered Dec 23 '22 09:12

AnandMohanAwasthi