在页面的控件集合上使用LINQ to Objects时遇到问题

时间:2011-02-15 21:08:38

标签: c# asp.net

我需要存储表单中的数据以便从会话中恢复。 下面是我对文本框的通用方法的粗略尝试:

加载会话:

Dictionary<string, string> AppInfo = (Dictionary<string,string>) Session["ApplicantionInfo"];
this.Controls.OfType<TextBox>()
         .ToList<TextBox>()
         .ForEach( x => x.Text = AppInfo[x.ID] );

保存会话:

Session["ApplicationInfo"] = this.Controls.OfType<TextBox>()
                                  .ToList<TextBox>()
                                  .ToDictionary<TextBox,string>(kvp => kvp.ID);  

然而,似乎Controls集合对我不起作用。我做错了什么?

当我快速观察时,

this.Controls.OfType<TextBox>()在运行时没有产生任何结果。

3 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

这是我访问表单控件的方式。

for (int i = 0; i < this.Controls.Count; i++)
{
      this.Controls[i].Visible = false;

 }

答案 2 :(得分:1)

怎么样

public static List<Control> GetAllControls(List<Control> controls, Type t, Control parent)
{
            foreach (Control c in parent.Controls)
            {
                if (c.GetType()== t)
                    controls.Add(c);
                if (c.HasControls())
                    controls = GetAllControls(controls, t, c);
            }
            return controls;
}

并致电

var allControls = new List<Control>();
GetAllControls(allControls, typeof(TextBox), Page);