2010-04-10 12 views
5

HTML tiene un tipo de botón de entrada para restablecer todos los campos en un formulario a su estado inicial en un solo paso: <input type="reset" ... />.¿Cómo borrar todos los campos de formulario de código subyacente?

¿Hay una manera similar similar de restablecer todos los campos de formulario de una página aspx desde código subyacente? ¿O es necesario restablecer todos los controles uno por uno con TextBox1.Text=string.Empty, TextBox2.Text=string.Empty, etc.?

¡Gracias de antemano!

Actualización:

El contexto es un simple Contacto/"Enviar un mensaje si" la página con 8 asp: cuadros de texto en la página (donde el usuario introduce el nombre, dirección, teléfono, correo electrónico, mensajes, etc. .). Luego hace clic en enviar, el manejador de mensajes Onclick en código subyacente envía un correo electrónico a algún administrador, y todos los campos de formulario que rellenó el usuario deben ser vaciados y recibe una notificación en una etiqueta ("Mensaje enviado a blabla ...") Quiero que los campos de formulario estén desactivados para evitar que el usuario vuelva a hacer clic en Enviar y se envíe el mismo mensaje por segunda vez.

+1

Dependiendo de lo que el escenario es, podría haber varias maneras de limpiar ellos. ¿Podría explicar cómo quiere que esto funcione en su escenario? –

+0

@Mikael Svenson: He agregado una "Actualización" a mi pregunta para responder a su pregunta. Espero que esto aclare las cosas. – Slauma

+0

En ese caso, propongo desactivar viewstate para los controles que desea borrar, tal como lo he escrito en mi respuesta. –

Respuesta

11

Solo necesita escribir una horquilla para cada tipo de control a menos que uno de los controles tenga algo especial que deba hacerse para restablecerlo.

foreach(var control in this.Controls) 
{ 
    var textbox = control as TextBox; 
    if (textbox != null) 
     textbox.Text = string.Empty; 

    var dropDownList = control as DropDownList; 
    if (dropDownList != null) 
     dropDownList.SelectedIndex = 0; 
    ... 
} 

ADEMÁS Se preguntó cómo eliminar los controles, incluso los que están enterrados. Para ello, se debe crear una rutina recursiva de este modo:

private void ClearControl(Control control) 
{ 
    var textbox = control as TextBox; 
    if (textbox != null) 
     textbox.Text = string.Empty; 

    var dropDownList = control as DropDownList; 
    if (dropDownList != null) 
     dropDownList.SelectedIndex = 0; 
    ... 

    foreach(Control childControl in control.Controls) 
    { 
     ClearControl(childControl); 
    } 
} 

Por lo tanto, ustedes llamarían esto pasando la página:

ClearControls(this); 
+0

Probablemente debería incluir alguna recursión si tiene conexiones de datos, controles dentro de plantillas y controles personalizados. –

+0

¡Buena cosa simple! (Será especialmente simple en mi caso ya que solo tengo TextBoxes en la página). ¡Gracias! – Slauma

+0

Hay un problema: Mis cuadros de texto están dentro del elemento 'Contenido' para' ContentPlaceHolder' porque mi página se deriva de una página maestra. La colección 'this.Controls' contiene solo un elemento que es la página maestra en sí misma (o algo derivado de ella) con el' ID = ctl00'. Estaba buscando depurador pero no puedo encontrar ninguna colección de objetos que representen mis TextBoxes. – Slauma

1

Por su escenario de la forma más fácil de limpiar los campos, en mi opinión, es apagar el ViewState (EnableViewState=false) de los controles que desea que aparezcan en blanco después del envío.

O tal vez para toda la página a menos que haya algún estado que necesite.

+0

Hm, acabo de probarlo (para uno de los cuadros de texto y también la opción de desactivar el ViewState de toda la página). Pero no funciona: todos los cuadros de texto siguen llenándose después de la devolución. – Slauma

+0

Si realiza una devolución de datos regular (no ajax) con EnabledViewState = false en la página o un control, no debería haber manera de que esos campos tengan valores, a menos que los configure en algún lugar. –

+0

He creado un sitio web de prueba (un TextBox + un botón, EnableViewState = "false" en el nivel de página y también para el TextBox): Mismo comportamiento, los valores en el TextBox se conservan después de PostBack. Busqué en Google un poco y encontré explicaciones: 1) http://www.dotnetfunda.com/articles/article760-common-misconception-regarding-viewstate-and-textbox-.aspx y 2) http://geekswithblogs.net /AaronLi/archive/2007/05/20/112615.aspx – Slauma

2

Usar form.Controls.Clear() no es una buena opción, ya que borrará todo el formulario e incluso perderá todos los botones del formulario.

En cambio, si lo que desea es borrar todos los campos del formulario, como campos de texto y botones de radio que recomendaría que pruebe lo siguiente: Si usted tiene un botón de reinicio “Button1” entonces haga clic en llamar a una función reset();

en la función de reinicio:

protected void resetButton_Click(object sender, EventArgs e) 
    { 
     TextBox1.Text=""; //set equal to empty string to all fields 
    } 

o redirigir a la página misma terminando la página anterior

protected void resetButton_Click(object sender, EventArgs e) 
    { 
     Response.Redirect("~/Test2.aspx", true); 
    } 
3

usando el enfoque manual de String.Empty para todos y cada uno de los cuadros de texto o cualquier otro campo será engorroso, también al usar Response.Redirect(); será difícil mostrar cualquier mensaje de confirmación o lo mismo.Así, en la lectura de tantos blogs que he encontrado un método fiable hasta ahora:

Public void reset(Control control) 
    { 
     foreach (Control x in control.Controls) 
     { 
     if (x is TextBox) 
     { 
      (x as TextBox).Text = String.Empty; 
     } 
     if (x is DropDownList) 
     { 
      (x as DropDownList).SelectedIndex = 0; 
     } 
     . 
     . 
     reset(x); 
     } 
    } 

utilizar este código como reset(this); en su página donde desea restablecer o borrar los valores. Al final de las if condiciones, no olvide utilizar la función recursivamente utilizando el mismo objeto Control x.

7

Consulte este enlace para obtener más información

http://www.freshcodehub.com/Article/3/clear-all-fields-like-textbox-dropdownlist-checkbox-radiobutton-label-after-form-submission-in-aspnet-c

public void ClearControls(Control parent) 
{ 
    foreach (Control c in parent.Controls) 
    { 
     if ((c.GetType() == typeof(TextBox))) //Clear TextBox 
     { 
      ((TextBox)(c)).Text = ""; 
     } 
     if ((c.GetType() == typeof(DropDownList))) //Clear DropDownList 
     { 
      ((DropDownList)(c)).ClearSelection(); 
     } 
     if ((c.GetType() == typeof(CheckBox))) //Clear CheckBox 
     { 
      ((CheckBox)(c)).Checked = false; 
     } 
     if ((c.GetType() == typeof(CheckBoxList))) //Clear CheckBoxList 
     { 
      ((CheckBoxList)(c)).ClearSelection(); 
     } 
     if ((c.GetType() == typeof(RadioButton))) //Clear RadioButton 
     { 
      ((RadioButton)(c)).Checked = false; 
     } 
     if ((c.GetType() == typeof(RadioButtonList))) //Clear RadioButtonList 
     { 
      ((RadioButtonList)(c)).ClearSelection(); 
     } 
     if ((c.GetType() == typeof(HiddenField))) //Clear HiddenField 
     { 
      ((HiddenField)(c)).Value = ""; 
     } 
     if ((c.GetType() == typeof(Label))) //Clear Label 
     { 
      ((Label)(c)).Text = ""; 
     } 
     if (c.HasControls()) 
     { 
      ClearControls(c); 
     } 
    } 
} 
Cuestiones relacionadas