2008-11-01 24 views
7

Tengo una página asp.net con un botón. Este botón genera e inserta un control de usuario en la página, por lo que muchos controles podrían existir en una página. Necesito validar que existe cierto control generado dinámicamente dentro del control generado.Validar un control de usuario ASP.NET desde su página principal

So ... La página tiene 0 a N Control1. Cada Control 1 puede tener de 0 a N Control2. Cuando se hace clic en SaveButton en la página, necesito asegurarme de que haya al menos 1 Control2 dentro de cada Control1.

Actualmente estoy entre dos opciones:

• insertar dinámicamente CustomValidators para cada control que se genera, cada uno de los cuales validaría una Control1.

• Realice la validación manualmente (con jQuery), llamando a una función de validación desde SaveButton.OnClientClick.

Ambos son descuidados a su manera, y es por eso que estoy compartiendo esto con todos ustedes. ¿Me estoy perdiendo la solución fácil?

Gracias de antemano .. (por cierto - nada hasta e incluyendo .NET 3.5 SP1 es juego limpio)

+0

Finalizar compra: [¿Cómo validar UserControl?] (Http://izlooite.blogspot.com/2010/07/how-to-validate-user-control.html) –

Respuesta

8

Hmm me gusta la idea de Interfaz sugerida por digiguru, pero utilizaría la interfaz en el contenedor Control1 en lugar de los subcontroles, ya que parece ser el lugar más lógico para el código. Aquí está mi opinión sobre ella:

public interface IValidatableControl 
{ 
    bool IsValidControl();  
} 

luego implementar esto en su Control1

public class Control1 : IValidatableControl 
{ 
... Other methods 
    public bool IsValidControl() 
    { 

     foreach(object c in this.Controls) 
     { 
      if(c.GetType() == "Control2") 
       return true; 
     } 
     return false; 
    } 

} 

probablemente hay mejores maneras de escribir esto, pero deben darle suficiente de una idea para empezar.

+0

Esa es una gran idea, y conduce a una mejor diseño de la página. Gracias :) – JoeB

+1

Me alegro de poder ayudar – digiguru

+2

Debe usar la interfaz IValidator en ASP.Net, proporciona IsValid, Validate y ErrorMessage.Su validador debe implementarlo, y en su desencadenante de inicialización debe llamar a Page.Validators.Add (this). – sisve

0

un método que se podría tratar de crear y mantener una estructura XML simple que representa la jerarquía de control personalizado. Inserte o elimine de esta estructura cada vez que cree o destruya un control de usuario personalizado. Al guardar, valide que la jerarquía de control representada en la estructura xml es correcta. Puede guardar el xml en el objeto Session para conservarlo en las devoluciones.

2

Si agrega controles de usuario sobre la marcha, puede hacer que cada control implemente la misma interfaz con una función Validar. De esta forma, puede cargar los controles en un marcador de posición en cada control principal de la página. Cuando se envíe la página, simplemente recorra los controles en el marcador de posición, transfiéralos a la clase de interfaz y luego llame a la función de validación. No utilizo validadores personalizados, pero puede crear una lista de errores de validación utilizando el objeto devuelto por la función de validación, puede procesar esta colección de errores de validación de la forma que desee.

1

Creo que podría hacerlo asignando una propiedad pública en Control1 que haga referencia a la existencia del ID de Control2, y luego decore la clase de Control1 con ValidationProperty. Estoy pensando en algo como lo siguiente:

[ValidationProperty("Control2Ref")] 
public partial class Control1 : UserControl 
{ 
    public string Control2Ref 
    { 
     get { return FindControl("Control2"); } 
    } 
    // rest of control 1 class 
} 

Y entonces usted debería ser capaz de señalar un RequiredFieldValidator en una instancia de Control1.

+0

indika notes (mal) un posible error en esto ... –

Cuestiones relacionadas