Compartir a través de


Controles de campo y formulario

Última modificación: viernes, 09 de abril de 2010

Hace referencia a: SharePoint Foundation 2010

Un formulario de Microsoft SharePoint Foundation está formado por controles ASP.NET que definen el formulario, así como los campos y demás elementos del formulario. Los controles SharePoint siguen una jerarquía de controles en la que existe un control de base del que se derivan todos los demás controles.

Los controles que se usan en los formularios de SharePoint están definidos dentro del espacio de nombres Microsoft.SharePoint.WebControls y admiten toda la funcionalidad de los formularios de SharePoint Foundation. Este espacio de nombres proporciona, por ejemplo, un control que representa campos basados en el esquema de lista, controles para todos los tipos de campos predeterminados de SharePoint, controles para la barra de herramientas, encabezado y pie de página, y un control para la lista. Puede reutilizar los controles existentes o extender los controles para alguna funcionalidad específica.

La figura 1 muestra la jerarquía de los controles comunes que se usan en los formularios y sus campos.

Figura 1. Controles comunes de campos y formularios

Jerarquía de control de formulario

Extensión de controles

Puede crear controles de campo personalizados que hereden la funcionalidad de campo básica de los controles de SharePoint Foundation pero eso modifica la manera en que se representan los campos. Un control de campo personalizado hereda de Microsoft.SharePoint.WebControls.BaseFieldControl, para que no sea necesario volver a implementar la funcionalidad del campo principal para personalizar la representación del campo. Puede insertar simplemente un control de campo existente en la página de formulario y establecer las propiedades en el control, o puede crear una clase de código subyacente que agregue el control.

Inicialización de página

Cuando crea, mediante programación, un campo a través de código subyacente, debe crear el control durante la etapa de inicialización del ciclo de vida de la página (Page_Init). De lo contrario, debido a que ASP.NET carga el estado de vista antes de la etapa de carga, el control de campo no recibe información actualizada del usuario cuando se crea.

El siguiente ejemplo indica cómo llamar a Page_Init.

Public Sub New()
    AddHandler Me.Init, AddressOf Page_Init
End Sub
Private Sub Page_Init(sender As Object, e As System.EventArgs)
    ... 'Add field control to the page control tree.
End Sub
public EditMetadata(): base()
{
    this.Init += new EventHandler(Page_Init);
}
private void Page_Init(object sender, System.EventArgs e)
{
    ... //Add field control to the page control tree.
}

Representación condicional

SharePoint Foundation admite tres formas diferentes de determinar la plantilla de control que se usa para la representación de un formulario:

  • Establecerla mediante programación para el control

  • Establecerla en la instancia del control mediante la configuración de un atributo de plantilla

  • Definir la plantilla en el marcado del control

La representación condicional de los formularios y campos a través de plantillas de control o de código subyacente implica el uso de, por ejemplo, las propiedades Template y AlternateTemplate y otros miembros heredados de Microsoft.SharePoint.WebControls.TemplateBasedControl. Puede crear formularios que seleccionen las plantillas usadas para representar controles y que muestren campos de manera diferente según el nivel de permiso de los usuarios.

Validación

SharePoint Foundation no usa los controles de validación .NET. Los campos predeterminados que se proporcionan en el espacio de nombres Microsoft.SharePoint.WebControls se heredan de BaseFieldControl, que implementa la interfaz System.Web.UI.IValidator e invalida su método Validate. La validación del servidor en formularios de SharePoint no está limitada al nivel de control de campo, sino que también se puede ejecutar mediante programación en código que usa el modelo de objetos.

Orden de los campos

El esquema de lista o el tipo de contenido determinan el orden de presentación de los campos en un formulario de lista. El control de repetición Microsoft.SharePoint.WebControls.ListFieldIterator dentro de un formulario sigue el orden de los campos definido en el archivo de esquema de lista (Schema.xml). El orden de los campos definido en el esquema determina el orden para los tres modos de control del formulario (creación, edición, y presentación).

Control FormField

Puede usar los controles FormField para producir un diseño fijo de los campos específicos y usar el control ListFieldIterator para representar los campos restantes. El control FormField crea instancias de un control de campo específico de tipo basado en el esquema de campo. Por lo tanto, para agregar un control de campo dentro de un formulario, use FormField en lugar de un control de campo específico de tipo. Por ejemplo, si usa un control de campo específico de tipo como TextField en un campo Text particular, pero más tarde se cambia el tipo de campo a otro tipo de datos, como Number, la representación del campo producirá un error debido a que el control de campo (TextField) no coincidirá con el tipo de campo. Sin embargo, el uso de un control FormField

creará una instancia del control correcto y la representación del campo no producirá ningún error.

Control CompositeField

El control CompositeField es muy útil debido a que su plantilla de control predeterminada incluye varios controles de campo. El control CompositeField usa FieldLabel para representar el nombre del archivo, FormField para mostrar los datos y FieldDescription para mostrar una descripción del campo. Además, el control CompositeField incluye el control AppendOnlyHistory para mostrar un campo de AppendOnly multilínea Text que permanece oculto en otros escenarios.

El siguiente ejemplo muestra la plantilla de control definida en DefaultTemplates.ascx para el control CompositeField.

<SharePoint:RenderingTemplate ID="CompositeField" runat="server">
  <Template>
    <TD nowrap="true" valign="top" width="190px" class="ms-formlabel"><H3 class="ms-standardheader">
      <SharePoint:FieldLabel runat="server"/>
    </H3></TD>
    <TD valign="top" class="ms-formbody" width="400px">
      <SharePoint:FormField runat="server"/>
      <SharePoint:FieldDescription runat="server"/>
      <SharePoint:AppendOnlyHistory runat="server"/>
    </TD>
  </Template>
</SharePoint:RenderingTemplate>

Puede crear una plantilla personalizada del iterador de campos de lista que incluya un control personalizado de campo compuesto, como se muestra en el ejemplo siguiente:

<SharePoint:RenderingTemplate ID="CustomListFieldIterator" runat="server">
  <Template>
    <TR>
      <SharePoint:CompositeField Template="CustomCompositeField" runat="server"/>
    </TR>
  </Template>
</SharePoint:RenderingTemplate>