Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Para que un control pueda examinar los datos de formularios devueltos por el cliente, deberá implementarse la interfaz System.Web.UI.IPostBackDataHandler. El contrato de esta interfaz permite que un control de servidor pueda determinar si es necesario, por una parte, modificar su estado como resultado de los datos devueltos y, por otra, provocar los eventos correspondientes. La interfaz IPostBackDataHandler contiene dos métodos.
public interface IPostBackDataHandler{
public bool LoadPostData(string postDataKey,
NameValueCollection postCollection);
public void RaisePostDataChangedEvent();
}
[Visual Basic]
Public Interface IPostBackDataHandler
Public Function LoadPostData(postDataKey As String, _
postCollection As NameValueCollection) As Boolean
Public Sub RaisePostDataChangedEvent()
End Interface
Tras la devolución, el marco de trabajo de la página busca en el contenido de la devolución los valores que coincidan con los UniqueID de los controles del servidor que implementan IPostBackDataHandler. A continuación, invoca de forma secuencial LoadPostData en cada control que implementa esta interfaz. Los dos argumentos de LoadPostData son: una clave que identifica el control y una colección, NameValueCollection, que contiene los datos devueltos. LoadPostData se implementa normalmente para actualizar el estado de un control como resultado de una devolución. En el siguiente ejemplo se muestra una implementación de LoadPostData de un control personalizado para un cuadro de texto.
public virtual bool LoadPostData(string postDataKey, NameValueCollection postCollection) {
string presentValue = Text;
string postedValue = postCollection[postDataKey];
if (!presentValue.Equals(postedValue)){
Text = postedValue;
return true;
}
return false;
}
[Visual Basic]
Public Overridable Function LoadPostData(postDataKey As String, postCollection As NameValueCollection) As Boolean
Dim presentValue As String = Text
Dim postedValue As String = postCollection(postDataKey)
If Not presentValue.Equals(postedValue) Then
Text = postedValue
Return True
End If
Return False
End Function
Si el estado del control cambia tras la devolución, LoadPostData devuelve true; de lo contrario, devuelve false. El marco de trabajo de la página hace un seguimiento de todos los controles que devuelven true e invoca a RaisePostDataChangedEvent en dichos controles. Los eventos de cambio, en su caso, se provocan desde este método. Por lo tanto el procesamiento de los datos de devolución se produce en dos fases: actualización del estado y provocación de las notificaciones de cambio. Esto evita que se provoquen notificaciones de cambios mientras se cargan los datos de devolución, momento en el que podrían alterar incorrectamente el estado antes de que todos los controles puedan cargar los datos de devolución. En el siguiente fragmento de código se muestra una implementación de RaisePostDataChanged de un control personalizado para un cuadro de texto.
public virtual void RaisePostDataChangedEvent() {
OnTextChanged(EventArgs.Empty);
}
[Visual Basic]
Public Overridable Sub RaisePostDataChangedEvent()
OnTextChanged(EventArgs.Empty)
End Sub
Es fundamental que la lógica de procesamiento asigne el UniqueID al atributo de nombre del control. De lo contrario, el marco de trabajo de la página no podrá enrutar los datos de devolución hacia el control. Si el control emite varios elementos de formulario, al menos uno de estos debe tener un atributo de nombre que corresponda al UniqueID del control. Para ver un ejemplo de un control personalizado que emite varios campos de formulario, vea Composición frente a procesamiento. El fragmento de código siguiente asigna UniqueID al atributo de nombre.
protected override void Render(HtmlTextWriter output)
{
output.AddAttribute(HtmlTextWriterAttribute.Type, "text");
output.AddAttribute(HtmlTextWriterAttribute.Value, this.Text);
output.AddAttribute(HtmlTextWriterAttribute.Name, this.UniqueID);
output.RenderBeginTag(HtmlTextWriterTag.Input);
output.RenderEndTag();
}
[Visual Basic]
Protected Overrides Sub Render(output As HtmlTextWriter)
output.AddAttribute(HtmlTextWriterAttribute.Type, "text")
output.AddAttribute(HtmlTextWriterAttribute.Value, me.Text)
output.AddAttribute(HtmlTextWriterAttribute.Name, me.UniqueID)
output.RenderBeginTag(HtmlTextWriterTag.Input)
output.RenderEndTag()
End Sub
Para ver una muestra de un control personalizado para un cuadro de texto que interviene en el procesamiento de datos de devolución, vea Ejemplo de procesamiento de datos de devolución.