开发者

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
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜