Control de usuario del cuadro de texto no mantendrá Estado
-
22-08-2019 - |
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.
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 ).