Parte I, Parte II.
Luego que terminé la primera parte de este post, me hicieron varias preguntas interesantes, como por ejemplo: cómo paso los valores de estos textboxes generados dinámicamente a otra página?
Bueno pues, este post se ha creado para responder esa inquietud.
Para la página en donde se crearán los textboxes necesito el sgte código aspx:
<form id="form1" runat="server">
<asp:Button ID="Button1" runat="server" Text="Generar textboxes" />
<br />
<asp:PlaceHolder ID="phDinamicControls" runat="server"></asp:PlaceHolder>
<hr />
<asp:Button ID="Button2" runat="server" Text="Enviar datos a otra página" PostBackUrl="~/WebForm2.aspx" />
</form>
Luego, en el código beside, ponemos este código:
Private Property QuantityDinamicControls() As Integer
Get
If ViewState("Quantity") = Nothing Then ViewState("Quantity") = 0
Return DirectCast(ViewState("Quantity"), Integer)
End Get
Set(ByVal value As Integer)
ViewState("Quantity") = value
End Set
End Property
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
Me.QuantityDinamicControls += 1
End Sub
Protected Overloads Overrides Sub CreateChildControls()
If Page.IsPostBack Then GenerateControls()
End Sub
Private Sub GenerateControls()
Dim Quantity As Integer = 0
While Quantity <= Me.QuantityDinamicControls
Dim txt As New TextBox()
txt.Attributes.Add("style", "margin-bottom: 10px")
txt.ID = "txt" + (Quantity + 1).ToString()
txt.Text = "Algún texto va aquí..."
phDinamicControls.Controls.Add(txt)
phDinamicControls.Controls.Add(New LiteralControl("<br/>"))
Quantity += 1
End While
End Sub
El cual, es casi el mismo que el post anterior, (por favor lean el post anterior).
La diferencia con el post anterior?
::en el código aspx añadí un botón con la propiedad PostBackUrl = “~/WebForm2.aspx”, lo cual me permitirá enviar los datos hacia la otra página.
Ahora, vamos a mostrar el código que va en la página WebForm2.aspx … para ver cómo se recepcionan los valores de los textboxes:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim MyDynamicControls As New List(Of String)
For Each item As String In Request.Form.AllKeys
If item.Contains("txt") Then
MyDynamicControls.Add(Request.Params(item))
End If
Next
End Sub
Eso es todo, lo que hice fue crear una colección de strings, y allí guardo los datos que me interesan… en este caso los textboxes, por eso antes de guardarlos pregunto si comienzan con “txt”.
Simple no? ;)
4 comentarios:
Bueno, gracias por la ayuda ahora que lo veo de esta manera puedo extender el uso de los controles dropdownlist o cualquier otro.
Muchas gracias por tu blog, asu, de vrdad es una gran ayuda para los programadores que diseñamos y desarrolamos en ASP.Net... Lo máxmo Johanna
Gracias por tu comentario Johanna.
muy pero muy buen aporte, estuve probando con ajax y me origina un problema ya que no seja los textboxes uno tras otro, sino q borra el que creó ultimo y luego crea el siguiente. no entiendo bien la logica de porque pasa esto. pero probe con tu codigo y efectivametne funciona.
Publicar un comentario