Pregunta

Tengo un control de usuario muy simple, básicamente, un cuadro de texto y una etiqueta, cuyo propósito es alternar entre uno y otro. El control está enlazado durante Page_Load event de la página. En caso Page_Load del control de usuario, llamo a la función Alternar (), que muestra u oculta el control apropiado y establece su texto sobre la base de una propiedad booleana y texto editable cadena de propiedades, respectivamente.

Aquí está mi método Toggle () (recuerda editable y texto son bienes de dominio público):

Public Sub Toggle()
    If Editable Then
        txtText.Visible = True
        lblText.Visible = False
        txtText.Text = Text
        txtText.CssClass = TextboxCSSClass
    Else
        txtText.Visible = False
        lblText.Visible = True
        lblText.Text = Text
        lblText.CssClass = LabelCSSClass
    End If
End Sub

Mi problema también es simple: cuando un botón en la página llama al método de la palanca de control (), la conmutación funciona bien, pero el texto desaparece! He intentado esto con un cuadro de texto independiente normales al lado de él, y el cuadro de texto mantiene su valor de texto muy bien. ¿Hay algo que estoy perdiendo?

Gracias por su ayuda por adelantado.

¿Fue útil?

Solución 2

he descubierto! Me disculpo por ser mudo. Esto es lo que estaba haciendo mal: Mi get / set para la propiedad de texto se almacenaba en un miembro privado. Esto significa que cuando se hicieron cambios al texto, no lo sabía, ya que no estaba conectado a la caja de texto. En su lugar, hice lo siguiente:

Public Property Text() As String
    Get
        Return txtText.Text
    End Get
    Set(ByVal value As String)
        txtText.Text = value
    End Set
End Property

y en mi evento Page_Load:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not IsPostBack Then
        lblText.Text = Text
        Toggle()
    End If
End Sub

y ahora funciona muy bien! Gracias a los que me dejó el camino correcto! :)

Otros consejos

Cuando se establece la propiedad visible de un control en False, no va a traducirse en HTML por lo que no puede continuar estado entre las páginas. En lugar considerar el uso de control MultiView

Actualización:. Más información con respecto a los comentarios

Si usted tiene el estado de vista discapacitados, y se establece el texto de los cuadros de texto, el texto es el que está en el control de entrada. Esto le puede afectar en el escenario poco común cuando se está tratando de saber si el valor de un cuadro de texto dada cambió.

Lo anterior es diferente para una etiqueta, ya que no es un control de entrada. Con el estado de vista desactivado, si no se establece el texto en cada solicitud, se mostrará el valor inicial (probarlo). El estado de vista es lo que permite automáticamente para mantener la información al otro lado de las devoluciones de datos para los controles.

Al igual que ocurre con la etiqueta, como ocurre con el control de usuario. Si cambia la incubadora por lo tanto establece controla directamente los textos, que se mantendrá el valor de los controles internos si está utilizando el estado de vista. Si lo apaga, se comportaría diferente para la etiqueta que para el cuadro de texto.

Tenga en cuenta también, que apagar el estado de vista, también afectaría a la configuración visible. Me gire el estado de vista de un montón, pero es posible tener un escenario en el que realmente quiere mantener la información de los controles al otro lado de las devoluciones de datos. Al apagar el estado de vista, es necesario asegurarse de configurar los controles siempre, no sólo cuando! IsPostBack.

Tenga en cuenta que si se mantiene un registro de lo que se supone que es visible y el texto en su código, entonces se podría desactivar el estado de vista del control interno (suponiendo que no está asignando cualquier otra propiedad a ellos).


Respuesta inicial:

Se le asigna el valor actual de la propiedad de texto a la etiqueta / caja de texto. Si no establece el valor de la petición actual, entonces tiene su valor por defecto, por lo que está recibiendo el texto vacío.

Puede guardar el valor en el estado de vista como (sintaxis de C #):

public string Text
{
   get
   {
      return (string) ViewState["MyText"];
   }
   set
   {
      ViewState["MyText"] = value;
   }
}

Sal. esta no es la única manera de hacerlo. Si la opción no ha ajustado el texto, sino que lo hizo en la incubadora a ambos controles, a continuación, que mantendrían los valores (siempre y cuando se asigna la propiedad Text del control de usuario después de estado de vista está siendo rastreado, al igual que en la página de carga ).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top