2012-07-12 7 views
14

yo soy capaz de obtener los identificadores de todos los controles de una página y también su tipo, en la página cuando lo imprimo muestraComprobación para el tipo de control

myPhoneExtTxt Type:System.Web.UI.HtmlControls.HtmlInputText 

esto se genera en base a este código

foreach (Control c in page) 
    { 
     if (c.ID != null) 
     { 
      controlList.Add(c.ID +" Type:"+ c.GetType()); 
     } 
    } 

Pero ahora tengo que comprobar su tipo y acceder al texto en ella, si su tipo de HtmlInput y no estoy muy seguro de cómo hacerlo.

Como

if(c.GetType() == (some htmlInput)) 
{ 
    some htmlInput.Text = "This should be the new text"; 
} 

cómo puedo hacer esto, creo que la idea ?.

Respuesta

31

Esto debería ser todo lo que necesita si consigo lo que estás preguntando:

if (c is TextBox) 
{ 
    ((TextBox)c).Text = "This should be the new text"; 
} 

Si su objetivo principal es establecer simplemente un poco de texto:

if (c is ITextControl) 
{ 
    ((ITextControl)c).Text = "This should be the new text"; 
} 

Con el fin de apoyar un oculto campo también:

string someTextToSet = "this should be the new text"; 
if (c is ITextControl) 
{ 
    ((ITextControl)c).Text = someTextToSet; 
} 
else if (c is HtmlInputControl) 
{ 
    ((HtmlInputControl)c).Value = someTextToSet; 
} 
else if (c is HiddenField) 
{ 
    ((HiddenField)c).Value = someTextToSet; 
} 

Se deben agregar controles/interfaces adicionales a la lógica.

+0

¿Esto incluye si el tipo de entrada es Oculto? – user1416156

+0

Lamentablemente, no. HiddenFields son pequeños bastardos desagradables ya que no heredan nada de nada útil y deben ser contabilizados directamente. He editado mi respuesta para incluir soporte. –

+0

Considere también usar el operador 'as' en verificaciones de tipos como estas. –

Cuestiones relacionadas