本文介绍了通过孩子里面循环UpdatePanel控件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我写了通过对象的所有属性循环,并将它们映射到具有相同的名称(或preFIX +名)控制的方法。问题是,我有一个更新面板(下拉当不同的选项被选中了更改列表),通过此方法运行时,不会被人发现里面的某些控制。我读并适应下面的方法以适应这一点,但它仍然不会找到更新面板内部的控制。所有控件具有ID和=服务器。
公共静态无效MapObjectToPage(这obj对象,控制父,字符串preFIX =)
{
类型type = obj.GetType();
字典<字符串的PropertyInfo>道具= type.GetProperties(BindingFlags.Public | BindingFlags.Instance).ToDictionary(资讯= GT; preFIX + info.Name.ToLower()); 的ControlCollection theControls =父的UpdatePanel? ((的UpdatePanel)母公司).ContentTemplateContainer.Controls:parent.Controls; 的foreach(在theControls控制C)
{
如果(props.Keys.Contains(c.ClientID.ToLower())及与放大器;!道具[c.ClientID.ToLower()]的GetValue(物镜,空)=空)
{
字符串键= c.ClientID.ToLower();
如果(c.GetType()== typeof运算(文本框))
{
((文本框)C)。文本=道具[关键] .PropertyType == typeof运算(日期时间?)
||道具[关键] .PropertyType == typeof运算(DATETIME)
? ((日期时间)的道具[关键] .GetValue(OBJ,NULL))。ToShortDateString()
:道具[关键] .GetValue(OBJ,空)的ToString();
}
否则,如果(c.GetType()== typeof运算(的HtmlInputText))
{
((的HtmlInputText)C).value的道具= [关键] .PropertyType == typeof运算(日期时间?)
||道具[关键] .PropertyType == typeof运算(DATETIME)
? ((日期时间)的道具[关键] .GetValue(OBJ,NULL))。ToShortDateString()
:道具[关键] .GetValue(OBJ,空)的ToString();
}
//喀嚓!
}
如果(c是的UpdatePanel
? ((的UpdatePanel)C).ContentTemplateContainer.HasControls()
:c.HasControls())
{
obj.MapObjectToPage(C);
}
}
}
解决方案
尝试将此两种方法添加到新的或现有的类:
public static List<Control> GetAllControls(Control control)
{
var children = control.Controls.Cast<Control>();
return children.SelectMany(c => FlattenChildren(c)).Concat(children).ToList();
}
You can call the GetAllControls method with the updatePanel as parameter (or the main container). The method returns all the children of the 'control' parameter. Also, you can remove the Where clause to retrieve all the controls (not those of a certain type).
I hope this will help you!
这篇关于通过孩子里面循环UpdatePanel控件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!