5

El problema que estoy teniendo, como dice el título, es que necesito usar el formato de nombre corto del mes con el año para las fechas validadas por un MaskedEditExtender del AjaxControlToolkit. MMM-aaaa para DateTime no es lo mismo que MaskedEditExtender.Mask = "LLL-9999".¿Es posible establecer una máscara para MaskedEditExtender para el formato de fecha MMM-aaaa que funcionaría en cualquier cultura?

Si uso en-US locale, funciona como charm, pero si cambio a fr-FR no funcionará porque la representación de mes corto en francés usa entre 4 y 5 letras (incluido el punto).

¿Alguna idea sobre esto? Gracias.

Respuesta

0

¿Podría establecer la máscara dinámicamente utilizando algo como esto?

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

intentado antes, pero no, ya que el formato que utiliza es diferente de esos patrones. –

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

Cuestiones relacionadas