2017年6月30日 星期五

【ASP.NET Webform】Recursive get specific type of control in container & filter id with string

遞回取得容器控制項中的指定型別子控制項集合與篩選 ID 包含特定字串

  1. public static List<T> FindSpecTypeCtrls<T>(this Control container, List<T> ctrls)
  2. where T : Control
  3. {
  4. if (container.Controls.OfType<Control>().Any())
  5. {
  6. foreach (Control item in container.Controls.OfType<Control>())
  7. {
  8. if (item is T)
  9. {
  10. T obj = (T)item;
  11. ctrls.Add(obj);
  12. }
  13. else
  14. {
  15. FindSpecTypeCtrls<T>(item, ctrls);
  16. }
  17. }
  18. }
  19.  
  20. return ctrls;
  21. }
  22.  
  23. public static List<T> FindSpecTypeCtrlsWhereIdContainsStr<T>(this Control container, string str)
  24. where T : Control
  25. {
  26. List<T> ctrls = new List<T>();
  27. FindSpecTypeCtrls<T>(container, ctrls);
  28. ctrls = ctrls.Where(ctrl => !string.IsNullOrEmpty(ctrl.ID) && ctrl.ID.Contains(str)).ToList();
  29.  
  30. return ctrls;
  31. }

使用 masterpage
  1. public static ContentPlaceHolder GetPlaceHolderById(this Page page, string placeHolderId)
  2. {
  3. return (ContentPlaceHolder)page.Master.FindControl(placeHolderId);
  4. }
  5.  
  6. public static T FindCtrlByIdInMasterPage<T>(this Page page, string placeHolderId, string id)
  7. where T : Control
  8. {
  9. T ctrl = (T)page.GetPlaceHolderById(placeHolderId).FindControl(id);
  10.  
  11. return ctrl;
  12. }

沒有留言:

張貼留言