Microsoft Developer Network > Página Inicial dos Fóruns > Fóruns do Web Development > ASP .NET > Textbox + MaskedEditExtender com ClearMaskOnLostFocus="false" = Erro no valor atribuido
Fazer uma PerguntaFazer uma Pergunta
 

RespondidoTextbox + MaskedEditExtender com ClearMaskOnLostFocus="false" = Erro no valor atribuido

  • quarta-feira, 4 de novembro de 2009 12:34Thiago Bernabé Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Contém Código
    Bom dia a todos !

    É o seguinte, o que ocorre aqui é que quando mantenho a propriedade ClearMaskOnLostFocus="false" de meu MaskedEditExtender o valor que é atribuido ao meu textbox fica errado. Por exemplo:

    Tenho a mascara (99) 9999-9999 e se eu tento atribuir 0123456789 o valor atribuido fica (12) 3456-789_

    Fiz até um projetinho separado pra ver se isolava o problema mais parece que ele está realmente ai.

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AtribuiçãoComMascara.aspx.cs"
        Inherits="Testes.AtribuiçãoComMascara" %>
    
    <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Untitled Page</title>
    </head>
    <body>    
        <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <div>
        </div>
        <asp:UpdatePanel ID="upl" runat="server">
            <ContentTemplate>
                <asp:TextBox ID="txt" runat="server" />
                <cc1:MaskedEditExtender ID="mee" runat="server" TargetControlID="txt" ClearMaskOnLostFocus="true"
                    Mask="(99) 9999-9999" />
                <asp:Button ID="btn" runat="server" Text="Atribuir" onclick="btn_Click" />
            </ContentTemplate>
        </asp:UpdatePanel>
        </form>
    </body>
    </html>
    
    using System;
    using System.Collections;
    using System.Configuration;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
    
    namespace Testes
    {
        public partial class AtribuiçãoComMascara : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
    
            }
    
            protected void btn_Click(object sender, EventArgs e)
            {
                string tel = "0123456789";
                txt.Text = tel;
            }
        }
    }
    
    

    Obrigado a todos pela atenção !!

Respostas

  • quarta-feira, 4 de novembro de 2009 23:55Thiago Bernabé Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Respondido
    O jeito provisório que dei aqui foi quando ele receber o dado do banco eu setar true para ClearMaskOnLostFocus.

    Vou tentar descobrir se é bug da penultima versão e volto para contar a novidade.


    Muito obrigado a todos !!
    • Marcado como RespostaThiago Bernabé quarta-feira, 4 de novembro de 2009 23:55
    •  

Todas as Respostas

  • quarta-feira, 4 de novembro de 2009 12:41kauebranco Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Ele "comeu" o 0(zero).

    Talvez se você mudar para Mask="(##) ####-####" e no onkeypress do TextBox você colocar uma função javascript para somente permitir números, pode ser que resolva.

    A função para permitir somente números por exemplo poderia ser assim:

        function SoNumeros(e)
        {
            if (document.all) // Internet Explorer
                var tecla = event.keyCode;
            else if(document.layers) // Nestcape
                var tecla = e.which;
            if (tecla > 47 && tecla < 58) // numeros de 0 a 9
                // if (tecla < 47 || tecla > 58) // letras de A a Z
                return true;
            else
            {
                if (tecla != 8) // backspace
                {
                    event.keyCode = 0;
                    return false;
                }
                else
                    return true;
                    //alert("Digite somente números");
            }
        }



    E para atribuir ao TextBox você pode colocar assim:
    <asp:TextBox ID="txt" runat="server"
       onkeypress="SoNumeros(this.value);" />


  • quarta-feira, 4 de novembro de 2009 12:48Thiago Bernabé Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Aqui ele não aceitou nem a mascara que você passou =/
  • quarta-feira, 4 de novembro de 2009 13:05Ramon B. Lima Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Contém Código
    Oi,

    Mude seu maskedit:

    <cc1:MaskedEditExtender ID="mee" runat="server" TargetControlID="txt" ClearMaskOnLostFocus="False"
                    Mask="(99) 9999-9999" />
    

    e seu text para:

    protected void btn_Click(object sender, EventArgs e)
        {
            string tel = "(01) 2345-6789";
            txt.Text = tel;
        }
    

    Abraço
    _____
    Se respondeu por favor marque como
    Ramon B. Lima
  • quarta-feira, 4 de novembro de 2009 13:06Thiago Bernabé Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Esse é um projeto de exemplo, na verdade o 0123456789 viria do banco.

    Você acha que a solução seria tratar a string do banco antes de atribui-la ?
  • quarta-feira, 4 de novembro de 2009 13:46Ramon B. Lima Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Sim, pq voce vai gravar assim não é mesmo?

    quando vc inserir no banco vai inserir com a mascara certo?

    entao quando buscar vai vim com a mascara tbm.
  • quarta-feira, 4 de novembro de 2009 14:35kauebranco Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Você pode também usar essa outra função javascript para formatar:

        function Formatar(src, mask)
        {   
            var i = src.value.length;
            var saida = mask.substring(0,1);
            var texto = mask.substring(i)   
            if (texto.substring(0,1) != saida)
             src.value += texto.substring(0,1);
        }



    E no TextBox você usa assim:
    <asp:TextBox ID="txt" runat="server"
       onkeypress="Formatar(this, '(##) ####-####'); SoNumeros(this.value);" />
  • quarta-feira, 4 de novembro de 2009 14:58Thiago Bernabé Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Não gravo a mascara não. O que fica salvo no banco são só os numeros.
  • quarta-feira, 4 de novembro de 2009 15:28Ramon B. Lima Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Contém Código
    Faz um extension method entao:

        protected void btn_Click(object sender, EventArgs e)
        {
            string tel = "0123456789";
            txt.Text = tel.ToPhoneFormat();
        }
    public static class Extension
    {
        public static string ToPhoneFormat(this string value)
        {
            string returnValue = string.Format("({0}) {1}-{2}", value.Substring(0, 2), value.Substring(1, 4), value.Substring(5, 4));
            return returnValue;
        }
        public static string RemovePhoneFormat(this string value)
        {
            string returnValue = value.Replace("(", "").Replace(")", "").Replace("-", "").Replace(" ", "");
            return returnValue;
        }
    }
    
    
  • quarta-feira, 4 de novembro de 2009 16:37William John Adam Trindade Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Olá

    Qual é a versao do teu AJAX Toolkit? Para mim seu exemplo esta funcionando normal. Cliquei no botao e apareceu o texto abaixo:

    (01) 2345-6789

    Eu uso a versao AjaxControlToolkit.dll V.3.0.30930.0

    Verifique se isso nao é um bug de uma versao antiga.

    Att

    William


  • quarta-feira, 4 de novembro de 2009 16:47Thiago Bernabé Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Cara, to usando a penultima, pois a ultima estavamos tendo muitos problemas: v3.0.30512.1

    Acha que pode ser isso ?
  • quarta-feira, 4 de novembro de 2009 16:54Erysson Barros Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     

    Fale,

    Olha o exemplo desse link, pois fiz um teste aqui e funcionou, agora na hora de salvar você remove “( , ) e  – “ com o replace, conforme o Ramon explicou.

    http://www.htmlstaff.org/ver.php?id=5282

    Abraço!


    Se a resposta solucionar sua dúvida, favor - Votar como Útil Abraço!
  • quarta-feira, 4 de novembro de 2009 17:15William John Adam Trindade Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Bom

    Eu tentei entender como funcionam os filtros do CodePlex, mas nao tive muito sucesso. Eu nao consegui ver a diferença da 30512 para 30930. Mas eu acho que é isso mesmo.

    Faça um teste. Mas qual é o problema com a versao nova? Nos usamos aqui e nao estamos tendo problemas com ela.

    Att

    William
  • quarta-feira, 4 de novembro de 2009 23:55Thiago Bernabé Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Respondido
    O jeito provisório que dei aqui foi quando ele receber o dado do banco eu setar true para ClearMaskOnLostFocus.

    Vou tentar descobrir se é bug da penultima versão e volto para contar a novidade.


    Muito obrigado a todos !!
    • Marcado como RespostaThiago Bernabé quarta-feira, 4 de novembro de 2009 23:55
    •  
  • quinta-feira, 5 de novembro de 2009 23:46Thiago Bernabé Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Tentei aqui mais o VS do meu pc ta cheio de zica !

    Alguem por favor teste para exclarecer a dúvida !

    Muito obrigado a todos !!