none
Validar campo em user control

    問題

  • Srs.,

    Tenho uma página "Teste.aspx" q tem um botão SALVAR.

    Nesta página tenho um User Control. Neste User Control tenho um textbox.

    Eu preciso que, ao clicar no botão SALVAR da página Teste.aspx, valide se este textbox que está no UC foi preenchido usando o RequiredFieldValidator.

    Quando o campo está na mesma página (aspx) não tenho problema. Uso desta forma:

    <asp:RequiredFieldValidator ID="idTeste" runat="server" ErrorMessage="Campo 'Teste' Obrigatório!"
     ControlToValidate="txtTeste" ValidationGroup="Salvar" ForeColor="Red">*</asp:RequiredFieldValidator>

    Mas isto não funciona caso o textbox esteja no UC.

    Como fazer?

    Grato

    2012年3月5日 下午 02:05

解答

  • Olá Rafael;

    Tenho um exemplo aqui que foi desenvolvido por um cara da minha equipe na empresa onde trabalho. No UserControl, que tem um TextBox, ele adicionou um CustomValidator e faz a validação do campo no lado do servidor.

    Segue o código:

    <asp:TextBox ID="txtAnswer" TextMode="MultiLine" runat="server" BorderWidth="1" CssClass="xgg" ></asp:TextBox>
    <asp:CustomValidator ID="cvAnswer" runat="server" ValidationGroup="Save" OnServerValidate="ServerValidate_Text" ForeColor="Red" Text="*"></asp:CustomValidator>

    No método OnServerValidate do Custom Validator tem o seguinte código:

    protected void ServerValidate_Text(object source, ServerValidateEventArgs args) { args.IsValid = (ReturnValuesOfTextField() != ""); }

    public string ReturnValuesOfTextField()
            {
                string value = "";
                int count = 0;


                while (count < this.Controls.Count)
                {
                    if (this.Controls[count].ID != null)
                    {
                        if (this.Controls[count].ID.ToString().Contains("txt"))
                        {
                            TextBox tb = (TextBox)this.Controls[count];


                            if (!String.IsNullOrEmpty(Request.Form[tb.UniqueID].ToString()))
                                value = Request.Form[tb.UniqueID].ToString().Trim();
                        }
                    }


                    count++;
                }


                return value;
            }

    Veja se dá certo aí, qualquer coisa estamos aí pra ajudar!!!


    Deise Vicentin
    "Eu não procuro saber as respostas, procuro compreender as perguntas." Confúcio

    2012年3月7日 下午 01:11
  • coloque isso no user control.

    <asp:TextBox ID="txtNome" runat="server" ValidationGroup="btnPagina"></asp:TextBox>
    <asp:RequiredFieldValidator ID="rqfTxtNome" runat="server" ErrorMessage="Prencher Campo Nome"
        ControlToValidate="txtNome" SetFocusOnError="True" ValidationGroup="btnPagina">*</asp:RequiredFieldValidator>

    e isso na página, da certo!

    <controle:uc runat="server" ID="ucValidar" />
        <asp:Button ID="Button1" runat="server" Text="Button" ValidationGroup="btnPagina" />

    Espero ter ajudado.

    2012年3月7日 下午 01:59

所有回覆

  • Bom dia.

    De uma olhada nestas threads:

    http://social.msdn.microsoft.com/Forums/pt-BR/aspnetpt/thread/6d58c626-5780-433c-b99c-8bb15e7104cf/

    http://msdn.microsoft.com/pt-br/library/bb398929.aspx



    Consultoria .NET

    ANALISTA DESENVOLVEDOR
    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como resposta.
    Blog .Net Descomplicado

    2012年3月5日 下午 02:08
  • Olá Rafael;

    Tenho um exemplo aqui que foi desenvolvido por um cara da minha equipe na empresa onde trabalho. No UserControl, que tem um TextBox, ele adicionou um CustomValidator e faz a validação do campo no lado do servidor.

    Segue o código:

    <asp:TextBox ID="txtAnswer" TextMode="MultiLine" runat="server" BorderWidth="1" CssClass="xgg" ></asp:TextBox>
    <asp:CustomValidator ID="cvAnswer" runat="server" ValidationGroup="Save" OnServerValidate="ServerValidate_Text" ForeColor="Red" Text="*"></asp:CustomValidator>

    No método OnServerValidate do Custom Validator tem o seguinte código:

    protected void ServerValidate_Text(object source, ServerValidateEventArgs args) { args.IsValid = (ReturnValuesOfTextField() != ""); }

    public string ReturnValuesOfTextField()
            {
                string value = "";
                int count = 0;


                while (count < this.Controls.Count)
                {
                    if (this.Controls[count].ID != null)
                    {
                        if (this.Controls[count].ID.ToString().Contains("txt"))
                        {
                            TextBox tb = (TextBox)this.Controls[count];


                            if (!String.IsNullOrEmpty(Request.Form[tb.UniqueID].ToString()))
                                value = Request.Form[tb.UniqueID].ToString().Trim();
                        }
                    }


                    count++;
                }


                return value;
            }

    Veja se dá certo aí, qualquer coisa estamos aí pra ajudar!!!


    Deise Vicentin
    "Eu não procuro saber as respostas, procuro compreender as perguntas." Confúcio

    2012年3月7日 下午 01:11
  • coloque isso no user control.

    <asp:TextBox ID="txtNome" runat="server" ValidationGroup="btnPagina"></asp:TextBox>
    <asp:RequiredFieldValidator ID="rqfTxtNome" runat="server" ErrorMessage="Prencher Campo Nome"
        ControlToValidate="txtNome" SetFocusOnError="True" ValidationGroup="btnPagina">*</asp:RequiredFieldValidator>

    e isso na página, da certo!

    <controle:uc runat="server" ID="ucValidar" />
        <asp:Button ID="Button1" runat="server" Text="Button" ValidationGroup="btnPagina" />

    Espero ter ajudado.

    2012年3月7日 下午 01:59
  • Crie uma propriedade publica no .cs do user control do tipo textbox que recebe e retorna o valor do texbox do user control e registre ele no seu formulario e no code behind da pagina chame essa propriedade publica que na verdade será o textbox, dai vc tera acesso ao conteudo dele

    public system.web.ui.webcontrols.textbox textb

    {

    get{txtbox = value}

    set{return txtbox}

    }

    chamada: seuUserControl.txtb.text < = esse sera o text box do uc.

    2012年3月7日 下午 02:47