2013年5月1日

[Asp.net] - FindControl找不到想要的Control?

當Asp.net混雜著UpdatePanel、TabPanel....容器時,控制項在編譯期都會被加上一段物件名稱,

但使用FindControl卻是要一層一層的去找找找....如下行範例.....

Control c=Page.FindControl("TabPanel1").FindPanel("tab_02").FindPanel("txtTest");

程式碼就會非常冗長..
網路上有高手把遞迴的方法帶入,下面程式碼是從網路上取得加以修改成自己習慣的撰寫方式

        public static T FindControl(Control startingControl, string id) where T : Control
        {
            
            // 取得 T 的預設值,通常是 null
            T found = default(T);

            if (startingControl.Controls.Count > 0)
            {
                foreach (Control activeControl in startingControl.Controls)
                {
                    if (activeControl is T)
                    {
                        found = activeControl as T;
                        if (string.Compare(id, found.ID, true) == 0) break;
                        else found = null;
                    }
                    else
                    {
                        found = FindControl(activeControl, id);
                        if (found != null) break;
                    }
                }
            }
            return found;
        }


最後show一下使用方式:
Control c = FindControl<TextBox>(this.Page, "txtTest");
是不是清爽多了!!!!
優點:前端aspx異動也不怕要異動程式碼
光這一點就可以省下許多時間去茶水間泡杯咖啡囉~

參考出處:
1.你有用 FindControl 時找不到 Control (控制項) 的經驗嗎
2.程式碼出處

沒有留言:

張貼留言