2010-11-05 16 views
5

Tengo un control UserControl de envoltura alrededor de una DropDownList para gestionar la traducción específica de un idioma en los valores de DropDownList.ASP.NET - Validar el control dentro de UserControl

También tengo un validador de campo requerido que se requiere para la lista desplegable interna.

¿Cómo puedo exponer este control a través del control de usuario para permitir la validación?

El error que estoy recibiendo actualmente es el siguiente:

... cannot be validated. at System.Web.UI.WebControls.BaseValidator.CheckControlValidationProperty(String name, String propertyName) 
     at System.Web.UI.WebControls.BaseValidator.ControlPropertiesValid() 

Editar: Ahora estoy usando ...

[ValidationPropertyAttribute("SelectedValue")] 

.... Con

public string SelectedValue 
{ 
    get { return cboI18nItems.SelectedValue; } 
} 

que ahora funciona si comprobo la propiedad IsValid de la página en la devolución de datos.

Respuesta

5

Su Validator debe estar dentro de su UserControl pero accesible desde la página.

O ajuste ValidationProperty en el UserControl

  1. Ponga el validador dentro del control de usuario. Puede acceder al ID de el control de entrada de datos.
  2. Use un Custom Validator. No use su propiedad ControlToValidate. En su lugar, dentro de su propia función de evaluación , tendrá acceso a DropDownList a través del UserControl. Probablemente hará que el campo DropDownList sea Público para que pueda ser visto una vez que haya encasillado el objeto UserControl a la clase de ese UserControl.
  3. Es posible usar ValidationPropertyAttribute. Necesita agregar una propiedad a su usercontrol que devuelve una cadena valor de los datos.

Encontrado here.

+0

Gracias a que ValidationProperty funcionó, estaba olvidando que esto solo sucedería en el servidor, lo que me obliga a verificar la propiedad IsValid de la página en la devolución de datos. – cweston

+0

Gracias, "No use su propiedad ControlToValidate" lo hizo por mí. – JanBorup

1

He manejado este problema de una manera un poco diferente de lo que se sugirió anteriormente. Aquí es un fragmento de código tomado de mi código:

Protected Sub ValidateCreditCard() 
    Dim validators = Page.GetValidators("cc") 
    For Each v In validators 
     DirectCast(v, BaseValidator).Validate() 
    Next 
End Sub 

Código VB.NET, pero debe ser fácil de entender.

Cuestiones relacionadas