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.

Rastreador Tag Bluetooth MiTag Android

Configuração e Rastreamento com Mi Tag O vídeo apresenta uma solução de rastreamento de equipamentos por meio de uma tag chamada MiTag, que foi comprada no AliExpress. O comunicador explica que esta tag funciona sem a necessidade de internet ou chip, utilizando a rede Bluetooth de outros celulares próximos para propagar sua localização até o aplicativo no celular do usuário. O vídeo demonstra o processo de configuração inicial da tag com o aplicativo Google Finder Hub, que é o localizador do Google, exclusivo para Android. Por fim, o tutorial também mostra como desinstalar e resetar a MiTag, um processo necessário caso o usuário queira emparelhar o dispositivo com um celular diferente, já que a tag fica bloqueada após a primeira conexão. https://youtu.be/mm1Z5lus7ag ## Funcionalidades Essenciais da Mi Tag As principais funcionalidades da Mi Tag giram em torno da capacidade de rastreamento independente e de longa duração: 1. **Rastreamento Sem Necessidade de Internet ou Chip:...

Gesseiro no Guará

DIONATO SOARES GESSEIRO Serviços/Produtos:  Gesseiro no Guará, Serviços com gessos, gesseiro, Guará-DF Endereço:  Guará - DF Site:   https://ds-servicos-reformas.com.br/ Telefone(s): (61) 98144-9158 (61) 98546-1059 Serviço de Gesseiro em Guara / DF Preço para Serviço de Gesseiro em Guara / DF Quer saber o  preço para serviço de gesseiro em Guara / DF ? Entre em contato conosco! Teremos prazer em lhe apresentar o melhor  orçamento para serviço de gesseiro em Guara / DF  considerando não somente o preço mais também a qualidade do serviço. Fotos de Serviço de Gesseiro em Guara / DF Procurando  fotos de serviço de gesseiro em Guara / DF ? Abaixo apresentaremos algumas fotos de trabalhos realizados em serviço de gesseiro em Guara / DF: Ops, ainda não terminamos de cadastrar todas as  fotos de serviço de gesseiro em Guara / DF , retorne em breve ou entre em contato para que possamos apresentar o nosso  portfólio de fotos ...