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
Textbox + MaskedEditExtender com ClearMaskOnLostFocus="false" = Erro no valor atribuido
- 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
- 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
- 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);" /> - Aqui ele não aceitou nem a mascara que você passou =/
- 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 - 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 ? - 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. - 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);" /> - Não gravo a mascara não. O que fica salvo no banco são só os numeros.
- 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; } } - 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 - Cara, to usando a penultima, pois a ultima estavamos tendo muitos problemas: v3.0.30512.1
Acha que pode ser isso ? 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!- 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 - 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
- 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 !!

