提交后清除所有字段

时间:2010-03-01 12:21:57

标签: c# asp.net

我在asp.net应用程序中有很多文本框,在提交它们的值之后我想在它再次加载时清除所有字段?

9 个答案:

答案 0 :(得分:14)

您需要在function

之后编写并调用类似的submit
   public static void EmptyTextBoxes(Control parent) 
   { 
      foreach (Control c in parent.Controls) { 
        if (c.GetType() == typeof(TextBox))
        { 
           ((TextBox)(c)).Text = string.Empty;            
        }  
      }
   }

参考

http://www.tek-tips.com/faqs.cfm?fid=6470

答案 1 :(得分:4)

这用于清除文本框,复选框,radioButton

等形式的所有控件

你可以添加你想要的不同类型..

private void ClearTextBoxes(Control control)
    {
        foreach (Control c in control.Controls)
        {
            if (c is TextBox)
            {
                ((TextBox)c).Clear();
            }

            if (c.HasChildren)
            {
                ClearTextBoxes(c);
            }


            if (c is CheckBox)
            {

                ((CheckBox)c).Checked = false;
            }

            if (c is RadioButton)
            {
                ((RadioButton)c).Checked = false;
            }
        }
    }

答案 2 :(得分:0)

您可以使用JavaScript表单reset()方法或循环遍历所有文本框,并将Text属性设置为空字符串。

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

答案 3 :(得分:0)

您可以在页面中执行此操作:

foreach (var tb in Controls.OfType<TextBox>())
{
  tb.Text = null;
}

如果您需要清除它们的整个层次结构,请从页面中调用一次:ClearTextBoxes(this);

这是功能:

private void ClearTextBoxes(Control c) {
  foreach (var tb in c.Controls.OfType<TextBox>())
  {
    tb.Text = null;
  }
  foreach (var control in c.Controls) {
    ClearTextBoxes(control); //Recurse down to children
  }
}

答案 4 :(得分:0)

public static Control[] FlattenHierachy(Control root)
{
    List<Control> list = new List<Control>();
    list.Add(root);
    if (root.HasControls())
    {
        foreach (Control control in root.Controls)
        {
            list.AddRange(FlattenHierachy(control));
        }
    }
    return list.ToArray();
}

private void ClearTextBoxes()
{
    Control[] allControls = FlattenHierachy(Page);
    foreach (Control control in allControls)
    {
        TextBox textBox = control as TextBox;
        if (textBox != null)
        {
            textBox.Text = "";
        }
    }
}

此代码将收集列表中的所有文本框,并将其textproperty设置为“”。

答案 5 :(得分:0)

那么你可以将字段设置为不使用viewstate,这意味着性能的提升,虽然很小,但仍然是一种提升。 同样,您可以执行response.redirect到同一页面或server.transfer 如果这两个解决方案不适合您,您可以使用textbox.text = string.empty和dropdowlist.clearselection。它们可能没有你想要的那么快,它们更优雅。

答案 6 :(得分:0)

完全没有尝试的解决方案:

你不能在Init或LoadViewState事件处理程序中使用ME.ViewState.Clear()吗?

或者它可能是Page.Viewstate.Clear()甚至是Page.ClearChildViewState()......

对不起 - 没有在愤怒中试过......

答案 7 :(得分:0)

这是一个老问题,但我只想添加以下内容,如果控件位于组框中,您可以这样做,然后:

        foreach (Control c in this.form.Controls)
        {
            //Tests each control to see if it is a GroupBox
            if (c is GroupBox)
            {
                clearRadioButtons(c.Controls);
                clearListBox(c.Controls);
                resetDateTime(c.Controls);
                clearTextBoxes(c.Controls);
                clearComboBoxes(c.Controls);
            }
        }    
    public static void clearTextBoxes(Control.ControlCollection controls)
    {
        //Loops through all controls on form
        foreach (Control c in controls)
        {
            //Tests each control to see if it is a textbox
            if (c is TextBox)
            {
                //Converts to useable format and clears textboxes
                var text = (TextBox)c;
                text.Clear();
            }
        }
    }

答案 8 :(得分:-1)

创建一个名为cleardata()的函数:

void cleardata()
{
    textbox1.Clear();
    textbox2.Clear();
    textbox3.Clear();
    textbox4.Clear();
}

并在需要时调用此函数。