Foros del Web » Programando para Internet » ASPX (.net) »

Mi ServerControl pierde los datos... (No tiene ViewState)

Estas en el tema de Mi ServerControl pierde los datos... (No tiene ViewState) en el foro de ASPX (.net) en Foros del Web. Buenas foreros !!! Verán, hice un simple ServeRcontrol, que tiene dos botones y una caja de texto. Cuando pulsas un botón, el Control pone un ...
  #1 (permalink)  
Antiguo 05/02/2009, 03:13
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 10 meses
Puntos: 7
Mi ServerControl pierde los datos... (No tiene ViewState)

Buenas foreros !!!

Verán, hice un simple ServeRcontrol, que tiene dos botones y una caja de texto. Cuando pulsas un botón, el Control pone un texto en la caja de texto. Y cuando pulsas el otro, se pone otro texto. Algo muy simple.

Sin embargo, si escribo algo en la caja de texto del control y pulso un boton DE L PÁGINA, no del control, esta página se actualiza, y la caja de texto del control, me aparece en blanco, sin mantenerme el valor que tenía antes.

¿Saben que puede ser?

Codigo de todo mi ServerControl
Código:
Imports System
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Text
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls


<ToolboxData("<{0}:CajaTextoNumerica runat=server></{0}:CajaTextoNumerica>")> _
Public Class CajaTextoNumerica
    Inherits WebControl
    Implements IPostBackEventHandler


    Private _accionPulsada = String.Empty

    Public Event OnCommand As CommandEventHandler
    Public Sub RaisePostBackEvent(ByVal eventArgument As String) Implements System.Web.UI.IPostBackEventHandler.RaisePostBackEvent

        _accionPulsada = eventArgument
        RaiseEvent OnCommand(Me, New CommandEventArgs("comandoInsertarQuitar", eventArgument))
    End Sub





    Protected Overrides Sub RenderContents(ByVal output As HtmlTextWriter)

        output.BeginRender()


        output.AddAttribute(HtmlTextWriterAttribute.Style, "background:green")
        output.RenderBeginTag(HtmlTextWriterTag.Div)

        'TEXTBOX
        output.Indent = 1
        If (_accionPulsada <> String.Empty) Then
            output.AddAttribute(HtmlTextWriterAttribute.Value, _accionPulsada)
        End If
        output.AddAttribute(HtmlTextWriterAttribute.Type, "text")
        output.RenderBeginTag(HtmlTextWriterTag.Input)
        output.RenderEndTag()
        output.Indent = 0


        output.RenderBeginTag(HtmlTextWriterTag.Br)
        output.RenderEndTag()

        'BOTON
        output.Indent = 1
        output.AddAttribute(HtmlTextWriterAttribute.Type, "submit")
        output.AddAttribute(HtmlTextWriterAttribute.Value, "insertar !!!")
        output.AddAttribute(HtmlTextWriterAttribute.Onclick, Page.ClientScript.GetPostBackEventReference(Me, "insertar"))
        output.RenderBeginTag(HtmlTextWriterTag.Input)
        output.RenderEndTag()
        output.Indent = 0

        'BOTON
        output.Indent = 1
        output.AddAttribute(HtmlTextWriterAttribute.Type, "submit")
        output.AddAttribute(HtmlTextWriterAttribute.Value, "quitar !!!")
        output.AddAttribute(HtmlTextWriterAttribute.Onclick, Page.ClientScript.GetPostBackEventReference(Me, "quitar"))
        output.RenderBeginTag(HtmlTextWriterTag.Input)
        output.RenderEndTag()
        output.Indent = 0

        output.RenderEndTag()


        output.EndRender()


    End Sub

    Protected Overrides Sub OnPreRender(ByVal e As System.EventArgs)

        MyBase.OnPreRender(e)
    End Sub
End Class
En fin, Espero puedan ayudarme, ya uqe no se me ocurre que puede ser.
__________________
Charlie.
  #2 (permalink)  
Antiguo 05/02/2009, 07:56
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: Mi ServerControl pierde los datos... (No tiene ViewState)

dale una vuelta al concepto de Statebag y el uso de este para que puedas manejar e state en tu control , ademas de la interfaz IStateManager para la clase de tu control.
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #3 (permalink)  
Antiguo 05/02/2009, 09:29
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 10 meses
Puntos: 7
Respuesta: Mi ServerControl pierde los datos... (No tiene ViewState)

Bueno, perfecto PETERPAY, muchas gracias, creo que con eso ya sé por donde van los tiros. Veo que me tengo que guardar yo cada propiedad en el ViewState a pelo...

Lo tengo entendido, pero... una pregunta. ¿Tal y como te he mostrado el código, podría enlazar la caja de texto que estoy creando, con una propiedad? ¿O por el contrario, tengo que crear un control TextBox en mi Control y trabajar con él asociandolo a las propiedades que quiero usar?

No sé si me explico... lo que me gustaría saber es, si creando mi caja de texto de la siguiente forma:
Código:
        output.AddAttribute(HtmlTextWriterAttribute.Type, "text")
        output.RenderBeginTag(HtmlTextWriterTag.Input)
        output.RenderEndTag()
Hay alguna forma de que pueda enlazar dinámicamente su propiedad "Value", con una propiedad de mi ServerControl, y que se detecte el cambio de texto cuando meta algo en la caja de texto, ¿O tengo que agregar la caja de texto a mi control de otra forma?

En fin, espero haberme explicado.
__________________
Charlie.
  #4 (permalink)  
Antiguo 05/02/2009, 09:38
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 10 meses
Puntos: 7
Respuesta: Mi ServerControl pierde los datos... (No tiene ViewState)

Bueno, ahora soy capaz de conseguir guardar una propiedad en el ViewState, perfecto, y cargo la propiedad en el Value de la caja de texto.

Sin embargo, si escribo algo en la caja de texto... y doy a un boton de la página para recargar la página, soy incapaz de asociar el texto de la caja, a la propiedad que tengo en el webservercontrol....


Código:
    Public Property [Text]() As String
        Get
            Dim o As Object = ViewState("Text")
            If (IsNothing(o)) Then
                Return String.Empty
            Else
                Return CStr(o)
            End If
        End Get
        Set(ByVal value As String)
            ViewState("Text") = value
        End Set
    End Property


        'TEXTBOX
        output.Indent = 1
        output.AddAttribute(HtmlTextWriterAttribute.Value, Me.Text)
        output.AddAttribute(HtmlTextWriterAttribute.Type, "text")
        output.RenderBeginTag(HtmlTextWriterTag.Input)
        output.RenderEndTag()
        output.Indent = 0
Esto va perfecto, pero... si en la página cambio el valor de la caja de texto.... no me lo guarda.
__________________
Charlie.
  #5 (permalink)  
Antiguo 10/02/2009, 07:16
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 10 meses
Puntos: 7
Respuesta: Mi ServerControl pierde los datos... (No tiene ViewState)

Bueno, si alguien puede decirme como puedo enlazar los controles que tengo dentro de mi WebControl con el ViewState, se lo agradecería, por que no sé como hacerlo la verdad....

He seguido los consejos de Peterpay, pero no soy capaz de conseguir que persistan los datos que escribi en la caja de texto...
__________________
Charlie.
  #6 (permalink)  
Antiguo 14/05/2009, 09:13
 
Fecha de Ingreso: mayo-2009
Mensajes: 10
Antigüedad: 15 años
Puntos: 1
Respuesta: Mi ServerControl pierde los datos... (No tiene ViewState)

Pk no utiliza SaveControlState y LoadControlState para preservar los datos que cosideras necesarios para la funcionalidad de tu control. Aunk estos metodos sirven si se puede serializar la info.

Última edición por Emarlo; 14/05/2009 a las 09:15 Razón: Falta de informacion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:47.