Pular para o conteúdo principal

Adicionar TextBox Dinamicamente usando Handler - Asp.Net





Estou postando um exemplo de página que adiciona controles dinamicamente no formulário. Neste exemplo eu utilizei vários UpdatePanel com Triggers configuradas e, em especial, o controle PlaceHolder. Este controle guarda todos os controles adicionados dinamicamente. A mágica deste código é que eu não preciso ficar remontando os controles toda vez que a página faz uma requisição ao servidor.

Código da página .aspx:


<%@ Page Language="C#" AutoEventWireup="true" CodeFile="AddControlDinamycHandler.aspx.cs"
    Inherits="AddControlDinamycHandler" %>

<!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>Add Control Dinamyc Asp.Net</title>
    <script src="Includes/Js/JQuery/lib/jquery-1.3.2.min.js" type="text/javascript"></script>
</head>
<body>
    <form id="form1" runat="server" method="post">
    <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <Triggers>
                <%--<asp:AsyncPostBackTrigger ControlID="ddlIS" EventName="SelectedIndexChanged" />--%>
                <asp:AsyncPostBackTrigger ControlID="Button2" EventName="click" />
            </Triggers>
            <ContentTemplate>
                <%-- <asp:DropDownList ID="ddlIS" runat="server" TabIndex="13" AutoPostBack="true" OnSelectedIndexChanged="ddlIS_SelectedIndexChanged">
                    <asp:ListItem Value="0">--------------------------</asp:ListItem>
                    <asp:ListItem Value="1" Text="numero">
                    </asp:ListItem>
                    <asp:ListItem Value="2" Text="id">
                    </asp:ListItem>
                    <asp:ListItem Value="3" Text="nome">
                    </asp:ListItem>
                    <asp:ListItem Value="4" Text="Entre R$ 500 mil e R$ 750 mil">
                    </asp:ListItem>
                    <asp:ListItem Value="5" Text="Entre R$ 750 mil e R$ 1 milhão">
                    </asp:ListItem>
                    <asp:ListItem Value="6" Text="Acima de R$ 1 milhão">
                    </asp:ListItem>
                </asp:DropDownList>--%>
                <asp:CheckBoxList ID="CheckBoxList1" runat="server">
                    <asp:ListItem Value="0">unidade</asp:ListItem>
                    <asp:ListItem Value="1" Text="numero">
                    </asp:ListItem>
                    <asp:ListItem Value="2" Text="id">
                    </asp:ListItem>
                    <asp:ListItem Value="3" Text="nome">
                    </asp:ListItem>
                    <asp:ListItem Value="4" Text="Entre R$ 500 mil e R$ 750 mil">
                    </asp:ListItem>
                    <asp:ListItem Value="5" Text="Entre R$ 750 mil e R$ 1 milhão">
                    </asp:ListItem>
                    <asp:ListItem Value="6" Text="Acima de R$ 1 milhão">
                    </asp:ListItem>
                </asp:CheckBoxList>
            </ContentTemplate>
        </asp:UpdatePanel>
        <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
            <%-- <Triggers>
                <asp:AsyncPostBackTrigger ControlID="Button1" EventName="click" />
            </Triggers>--%>
            <ContentTemplate>
                <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
            </ContentTemplate>
        </asp:UpdatePanel>
        <div id="divControls">
        </div>
     
        <asp:Button ID="Button2" runat="server" Text="Gerar Filtros" OnClientClick="CallAjax(10, '', '');" />
     
        <br />
        <asp:UpdatePanel ID="UpdatePanel3" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="false">
            <Triggers>
                <asp:AsyncPostBackTrigger ControlID="Button1" EventName="click" />
            </Triggers>
            <ContentTemplate>
                <asp:Button ID="Button1" runat="server" Text="Ler Filtros" OnClick="Button1_Click" />
            </ContentTemplate>
        </asp:UpdatePanel>
        <asp:UpdatePanel ID="UpdatePanel4" runat="server" UpdateMode="Conditional">
            <Triggers>
                <asp:AsyncPostBackTrigger ControlID="Button1" EventName="click" />
            </Triggers>
            <ContentTemplate>
                <asp:Label ID="lblControleNome" runat="server" Text=""></asp:Label>
            </ContentTemplate>
        </asp:UpdatePanel>
        <asp:HiddenField ID="hdArrayCodigos" runat="server" />
    </div>
    </form>
    <script language="javascript" type="text/javascript">
        var controles;
        function InserirControles() {
            controles += $get('hdArrayCodigos').value;
            $get('divControls').innerHTML = controles;
        }
     
        //        var pageReqManger = Sys.WebForms.PageRequestManager.getInstance();
        //        pageReqManger.add_pageLoading(OnPageLoading);
        //        /// To execute on page loading while async postback
        //        function OnPageLoading(sender, args) {
        //            var dataItems = args.get_dataItems();
        //            if ($get('hdArrayCodigos') !== null)
        //                $get('hdArrayCodigos').value = dataItems['hdArrayCodigos'];
        //            InserirControles();
        //        }

        function CallAjax(CoAgencia, DtInicial, DtFinal) {

            var cookmsn = null; // readCookie('mensagem');

            var html = '';

            if (cookmsn == null || cookmsn == "") {
                try {
                    html = $.ajax({

                        type: "POST",
                        url: "pagina.tb?cod=txtNome"+ new Date().getTime(),
                        data: "CoAgencia=" + CoAgencia,
                        success: function (html) {

                        },
                        async: false
                    }).responseText;
                }
                catch (Error) { }
            }

            $get('divControls').innerHTML = html;
        }

        //CallAjax(10, '', '');

    </script>
</body>
</html>





Código do .cs da página .aspx:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

public partial class AddControlDinamycHandler : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        //foreach (var item in Page.Controls)
        //{
        //    if (item.GetType() == typeof(TextBox))
        //    {
        //        TextBox textbox = item as TextBox;
        //        lblControleNome.Text += textbox.ID;
        //    }
        //}

        lblControleNome.Text = this.Request.Form["txt0"];
        lblControleNome.Text += this.Request.Form["txt1"];
        lblControleNome.Text += this.Request.Form["txt2"];
        lblControleNome.Text += this.Request.Form["txt3"];
        lblControleNome.Text += this.Request.Form["txt4"];
        lblControleNome.Text += this.Request.Form["txt5"];
        lblControleNome.Text += this.Request.Form["txt6"];

        lblControleNome.Text += this.Request.Form["txtNome"];

    }

    protected void Button2_Click(object sender, EventArgs e)
    {
        foreach (ListItem item in CheckBoxList1.Items)
        {
            if (item.Selected)
            {
                TextBox textbox1 = new TextBox();
                textbox1.ID = "txt" + item.Value;
                textbox1.Text = item.Text;
             
                PlaceHolder1.Controls.Add(textbox1);
                PlaceHolder1.Controls.Add(new HtmlGenericControl("br"));
            }
        }

        UpdatePanel2.Update();
     
    }

    protected void ddlIS_SelectedIndexChanged(object sender, EventArgs e)
    {
        //string TextBoxControl = "<input type=text name=txt1 id=txt1 runat=server/>";
        //registra os dados da loterica para serem passados para o campo que está fora do updatepanel
        //ScriptManager1.RegisterDataItem(hdArrayCodigos, Server.HtmlDecode(TextBoxControl));

        //TextBox textbox1 = new TextBox();
        //textbox1.ID = "text1";
        //textbox1.Text = ddlIS.SelectedItem.Text;
        //PlaceHolder1.Controls.Add(textbox1);

        //textbox1 = new TextBox();
        //textbox1.ID = "text2";
        //textbox1.Text = ddlIS.SelectedItem.Text;
        //PlaceHolder1.Controls.Add(textbox1);

        //textbox1 = new TextBox();
        //textbox1.ID = "text3";
        //textbox1.Text = ddlIS.SelectedItem.Text;
        //PlaceHolder1.Controls.Add(textbox1);
     
    }
}

Código do Handler:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI;

namespace Business
{
   public  class TextboxHandler : IHttpHandler
    {

        public bool IsReusable
        {
            get
            {
                return true;
            }
        }

        public void ProcessRequest(HttpContext context)
        {
            //TextBox textbox1 = new TextBox();
            //textbox1.ID = Guid.NewGuid().ToString();
            //textbox1.Text = "TextBox" + textbox1.ID;
            var req = context.Request["cod"];

            context.Response.Write(string.Format("<input tyep=text id={0} runat=server name={1}></input>",Guid.NewGuid().ToString(),req));
         
        }
    }
}

Web.config:


 <httpHandlers>
   
      <add path="*.tb" verb="*" type=" Business.TextboxHandler,  Business"/>
  
    </httpHandlers>

Comentários

Postagens mais visitadas deste blog

EmguCV DLL Not Found Exception -Unable to find cvextern?

Eu também tive os mesmos problemas. Neste fórum emgucv , não sei por que cvextern.dlldo emgucv 3.4.3 não é possível carregar cvextern (porque não é possível encontrar cvextern), e você permitiu usar o arquivo cvextern.dlldo emgucv 3.4.2 (certifique-se de escolher x64 / x86), copie /bin/Debuge este arquivo é encontrado automaticamente /bin/Debug/x86ou /bin/Debug/x64quando você termina de construir o programa no Visual Studio.  O Erro:  The type initializer for 'Emgu.CV.CvInvoke' threw an exception. : Unable to load DLL 'cvextern': The specified module could not be found. (Exception from HRESULT: 0x8007007E)  Para resolver o problema copia a pasta x64 ou x86 para dentro da pasta bin da aplicação. Ou copie os arquivos para dentro da pasta bin da aplicação WCF.

Vagas .Net - Projeto CNSA

Prezados, Estamos selecionando candidados, em forma de cadastro de reserva, para participar do projeto: Cadastro Nacional de Sociedade de Advogados, na Assessoria de Tecnologia da Informação do Conselho Federal da OAB. Basicamente teremos 3 fases: * Avaliação Curricular; * Entrevista Pessoal; * Verificação prática; Outras informações: Vaga: Desenvolvedor .NET. Quantidade: 3. Tempo: 4 meses. Segue abaixo os requisitos que devem ser atendidos pelo candidato: Conhecimentos básicos * Conhecimento avançado em C#; * Conhecimento em ASP.NET 2.0; * ADO.NET 2.0; * SQL SERVER 2005 (DML, stored procedures, MER); * UML (Interpretação de casos de uso, diagrama de atividades, de classe, de sequência); * Experiência em projetos anteriores com ASP.NET e C#; Desejável * LINQ TO SQL; * Conhecimento em JavaScript e padrões Web (XHTML, CSS, etc); * ASP.NET 3.5; * C# 3.0 (LINQ, Propriedade implementadas automaticamente, Métodos de Extensão, Expressão Lamb...

Lista de IPs DNS Oi nos Estados

As vezes quando colocamos um IP fixo para uma máquina na rede, e esta rede tem acesso a internet através da rede da Oi, bem provável que você não conseguirá acessar a internet. Para resolver o problema defina o DNS primário e Secundário nas propriedades da placa de rede. - Protocolo TCP/IP Versão 4 (TCP/IPv4). Segue lista de DNS por estado. RS 201.10.1.2 201.10.120.3 SC 201.10.120.3 201.10.1.2 PR 201.10.120.2 201.10.128.3 GO 201.10.128.3 201.10.120.3 DF 201.10.128.2 201.10.120.2 MS 201.10.128.3 201.10.1.2 MT 201.10.128.2 201.10.120.3 RO/AC 201.10.128.2 201.10.1.2