2012-04-05 39 views
0

我被困在这个问题上,似乎无法找到解决方法。 我有一个CheckBoxList控件。如果你不知道,CheckBoxList控件上的FindControl()方法返回“this”。微软做到了这一点,因为内部他们不创建许多ListItem对象,但只有一个。 无论如何,我想知道是否发布的后台控件是我的CheckBoxList中的控件之一。我的代码看起来沿着线的东西:ASP.NET试图找到我的ID是否是CheckBoxList控件的子控件

if (!(System.Web.UI.ScriptManager.GetCurrent(Page) == null)) { 
string postbackControlId =   System.Web.UI.ScriptManager.GetCurrent(Page).AsyncPostBackSourceElementID; 
    if (!string.IsNullOrEmpty(postbackControlId)) 
    { 
     Control control = ControlFinder.RecursiveFindChildControl(Controls, postbackControlId); 
     if (!(control == null)) 
     { } 
    } 
} 

反正是有枚举的CheckBoxList的子控件或发现,如果我有一个ID等于他们的呢?

谢谢, 迈克

回答

0

一个CheckBoxCheckBoxListUniqueIDCheckBoxListUniqueID加上$加上项目的索引,这样你就可以检查postbackControlId是否是CheckBox控件之一像这样:

if (postbackControlId.StartsWith(this.checkBoxList.UniqueID + "$")) 
{ 
    int itemIndex = Convert.ToInt32(
     postbackControlId.Substring(this.checkBoxList.UniqueID.Length + 1), 10); 
    // ... 
} 
+0

谢谢你。这正是我也开始做的 – BlueChameleon 2012-04-05 18:54:55

0

如果你只希望找出是否回发是由CheckBoxList的项目之一造成的,你并不需要遍历整个控制层次。你甚至不需要深入到列表中。这样的事情应该很好地工作:

string elementID = ScriptManager.GetCurrent(Page).AsyncPostBackSourceElementID; 
if (elementID.Contains(chkList.UniqueID)) 
{ 
    //one of the checkboxes caused the postback 
} 
相关问题