首页 新闻 会员 周边

foreach循环清空页面全部控件的问题

0
悬赏园豆:10 [已解决问题] 解决于 2012-10-15 15:27

我在项目中想将页面的textbox控件全部清空,控件很多逐个清空很繁杂,现在用foreach循环:

foreach (Control ctl in this.Controls)
                    if (ctl is TextBox)
                    { ((TextBox)ctl).Text = " "; }

 

运行后不成功,跟总调试发现代码没有执行{ ((TextBox)ctl).Text = " "; }这个语句,而是来回的执行上面一部分,foreach (Control ctl in this.Controls)
                    if (ctl is TextBox),请各位博友帮忙分析。

pengjw的主页 pengjw | 初学一级 | 园豆:3
提问于:2012-10-15 14:49
< >
分享
最佳答案
0

用“foreach (Control ctl in this.Form.Controls)”试试。

收获园豆:6
我不懂爱 | 菜鸟二级 |园豆:246 | 2012-10-15 15:12

哈哈,成功了,万分感谢!

pengjw | 园豆:3 (初学一级) | 2012-10-15 15:17
其他回答(3)
0

那说明没有TextBox控件,你这个地方的this是什么?应该是this.Page.Controls吧?

收获园豆:3
田林九村 | 园豆:2367 (老鸟四级) | 2012-10-15 14:57

我试试

支持(0) 反对(0) pengjw | 园豆:3 (初学一级) | 2012-10-15 14:59

还是不行呢,我感觉那个地方不用page的话,默认的话也是指当前页面的控件,我的当前页面肯定有textbox控件,而且所有的输入文本控件都是textbox控件,那为什么获取不到呢

支持(0) 反对(0) pengjw | 园豆:3 (初学一级) | 2012-10-15 15:02

@pengjw: 你把整个后台代码贴出来吧

支持(0) 反对(0) 田林九村 | 园豆:2367 (老鸟四级) | 2012-10-15 15:07

@田林九村: 

 protected void btnCopy_Click(object sender, EventArgs e)
        {
            DAModel model = this.createModel();
            DADAL dal = DALFactory.GetDAL(this.GetName());
            //DA_AJModel ajModel = model as DA_AJModel;
            //Int64 aa = Convert.ToInt64(ajModel.AJH.ToString().Trim());
            //this.txtAJH.Text = Convert.ToString(aa + 1);
            //ajModel.AJH = this.txtAJH.Text.ToString();
            string message = string.Empty;
            try
            {
                if (hidSaved.Value == "1")
                {
                    dal.Update(model);
                }
                else
                {
                    dal.Add(model);
                    hidSaved.Value = "1";
                }
                WriteLog(this.GetName());
                message = "保存成功!";

                this.AfterSave(model);
                this.hidSaved.Value = "0";
                Page.ClientScript.RegisterStartupScript(this.GetType(), "onClick", "<script>window.opener.__doPostBack('btnQuery','');</script>");
            }
            catch
            {
                WriteLogW(this.GetName());
                Page.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>window.alert('保存失败');</script>");
            }
            if (message == "保存成功!")
            {
                foreach (Control ctl in this.Page .Controls)
                    if (ctl is TextBox)
                    { ((TextBox)ctl).Text = " "; }
                //ClearAll();
            }

这是if语句所在的方法,你先看看能不能分析呢

支持(0) 反对(0) pengjw | 园豆:3 (初学一级) | 2012-10-15 15:13

一个博友说this.Form.Controls,那样就可以了。谢谢!Form是一个控件,而Control ctl in this.Form .Controls这个语句是获取页面控件的子控件,这样可以理解啦!万分感谢!

支持(0) 反对(0) pengjw | 园豆:3 (初学一级) | 2012-10-15 15:21
0

foreach (Control ctl in this.form1.Controls)
                    if (ctl is TextBox)
                    { ((TextBox)ctl).Text = " "; }

收获园豆:1
chenping2008 | 园豆:9836 (大侠五级) | 2012-10-15 15:26
0

 在我们将页面发送到服务器的时候,象一些没有runat="server"属性的控件是不发的,发送过去的控件就能用page对象用,

但是这是分层的

int num = Page.Controls.Count;
for (int i = 0; i < num; i++)
{
Response.Write(Page.Controls[i].ToString() + "<br>");
}

这样可以看到第一层,一般就System.Web.UI.HtmlControls.HtmlHead和System.Web.UI.HtmlControls.HtmlForm,有时有空格会有System.Web.UI.LiteralControl,所以要找到HtmlForm的索引,一般是1,我们这里就当成1先用

foreach (Control ctl in Page.Controls[1].Controls)
{
if (ctl.GetType().Name == "TextBox")
{
TextBox tb = new TextBox();
tb = (TextBox)this.FindControl(ctl.ID);
tb.Text = "";
}
}

其实这种方式只能够将form表单中第一层的控件中的textbox清空,

hongdada | 园豆:216 (菜鸟二级) | 2012-10-15 17:38

补:

给你一个好东西,用递归写的通用的

public void ClearText(Control page)
{
if (page.HasControls())
{
foreach (Control control in page.Controls)
{
if (control is TextBox)
{
(control as TextBox).Text = "";
}

ClearText(control);
}
}

}

调用这个方法就行ClearText(this.Page);

给你个看看页面控件层次

string text = "";
public void ClearText(Control page)
{
if (page.HasControls())
{
text = text + "&nbsp;&nbsp;&nbsp;&nbsp;";
foreach (Control control in page.Controls)
{

Response.Write(text+control.ToString()+"<br>");
ClearText(control);
}
text = text.Substring(0, text.Length - 24);
}

}

支持(0) 反对(0) hongdada | 园豆:216 (菜鸟二级) | 2012-10-15 18:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册