HtmlGenericControl后台创建控件后找不到

ouyang4683 2016-01-11 11:51:32
前台服务器端的div <div class='panel-body' id="showdiv" runat="server" style="height:500px;">
后台HtmlGenericControl创建了〈ul〉<li> 中间包着几个CheckBox

HtmlGenericControl myul = new HtmlGenericControl("ul");
HtmlGenericControl myli = new HtmlGenericControl("li");

CheckBox cb = new CheckBox();
cb.ID = list.UID.ToString();
cb.Checked = true;


创建显示没问题
但查找控件 找不到
CheckBox cb = (CheckBox)showdiv.FindControl(list.UID.Value.ToString());



this.EnsureChildControls();也用了,也找不到
为什么
...全文
126 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ouyang4683 2016-01-11
  • 打赏
  • 举报
回复
再补充 private void debugctl(Control p) { foreach (Control ctl in p.Controls) { Debug.WriteLine(ctl.UniqueID.ToString() + ":" +ctl.GetType().ToString()); if (ctl.Controls.Count != 0) debugctl(ctl); } } 创建的时候,打印出来,是有CheckBox的, ctl00$MainContent$ctl09:System.Web.UI.HtmlControls.HtmlGenericControl ctl00$MainContent$2:System.Web.UI.WebControls.CheckBox ctl00$MainContent$ctl10:System.Web.UI.WebControls.Label ctl00$MainContent$ctl11:System.Web.UI.HtmlControls.HtmlGenericControl ctl00$MainContent$ctl12:System.Web.UI.WebControls.Image ctl00$MainContent$ctl13:System.Web.UI.HtmlControls.HtmlGenericControl ctl00$MainContent$3:System.Web.UI.WebControls.CheckBox ctl00$MainContent$ctl14:System.Web.UI.WebControls.Label 但点了提交,打印就没有CheckBox
ouyang4683 2016-01-11
  • 打赏
  • 举报
回复
忘了说了,用的母版 方式 后台直接 用 Showdiv.FindControl("MainContent_2") 也找不到
ouyang4683 2016-01-11
  • 打赏
  • 举报
回复
找到原因了 我把创建控件的方法放在 if (!IsPostBack) 里了
Justin-Liu 2016-01-11
  • 打赏
  • 举报
回复
看看在POSTBACK的时候有哪些内容没做?
2.ASP.NET.2.0.高级编程(第4版) [1/7] 原书名: Professional ASP.NET 2.0 原出版社: Wrox 作者:(美)Bill Evjen, Scott Hanselman, Farhan Muhammad [同作者作品] [作译者介绍] 译者: 李敏波[同译者作品] 出版社:清华大学出版社 ISBN:7302139067 上架时间:2006-11-16 出版日期:2006 年11月 开本:185×260 页码:1090 版次:4-1 内容简介回到顶部↑本书全面介绍了ASP.NET各种编程技能和2.0版中的巨大变化,并详细阐述了2.0版中的每个新特性。书中提供了大量的实例,可帮助读者快速掌握如何在.NET平台下开发功能强大的ASP.NET应用程序。本书适合有一些基础的ASP.NET初级程序员以及准备迁移到ASP.NET 2.0的编程老手。该书与《ASP.NET 2.0入门经典(第4版)》及其早期版本,曾影响到无数中国Web程序员。. ASP.NET允许Web站点为每个访问者显示独一无二的页面,而不是显示相同的静态HTML页面。ASP.NET 2.0的发布,使Web应用程序的开发又前进了一大步。这个新版本增加了大量的新功能,减少了编写常见应用程序所需的代码量。 ASP.NET 2.0新增了50多个新服务器控件,类的数量也翻了一倍,其他许多方面也有很大的变化。本书介绍了ASP.NET 2.0中的每个新增特性和功能,以便读者把这些新技术应用于实践。.. 本书主要内容 ● 服务器控件的概念及其在ASP.NET开发中的主导作用 ● 使用新的Master页面特性创建模板化的ASP.NET页面 ● 调试和处理错误的技术 ● 提取、创建、处理和存储XML的各种框架 ● 打包和部署ASP.NET应用程序的方法 ● 快速、逻辑地检索、更新和删除数据 本书读者对象 本书适合于有一些ASP.NET基础知识的学习者以及准备迁移到ASP.NET 2.0的有经验的程序员和开发人员。 目录回到顶部↑ 第1章 ASP.NET 2.0概述 1 1.1 简史 1 1.2 ASP.NET 2.0的目标 2 1.2.1 开发人员的效率 3 1.2.2 管理 5 1.2.3 性能和可伸缩性 8 1.3 ASP.NET 2.0的其他新特性 8 1.3.1 新的开发人员体系结构 8 1.3.2 新的编译系统 12 1.3.3 页面框架的新增内容 13 1.3.4 访问数据的新对象 15 1.3.5 新的服务器控件 15 1.4 建立ASP.NET 2.0页面的新IDE 16 1.5 小结 17 第2章 Visual Studio 2005 19 2.1 启动页面 19 2.2 文档窗口 20 2.2.1 文档窗口中的视图 20 2.2.2 标记导航器 21 .2.2.3 页面标签 22 2.2.4 代码改变状态的通知 23 2.2.5 错误通知和辅助 23 2.3 工具箱 25 2.4 Solution Explorer 26 2.5 Server Explorer 28 2.6 Properties窗口 28 2.7 丢失的窗口 29 2.8 其他常见的Visual Studio操作 29 2.8.1 创建新项目 29 2.8.2 引用其他对象 30 2.8.3 使用智能标记 32 2.8.4 保存和导入Visual Studio设置 32 2.8.5 验证HTML 34 2.8.6 团队的合作 36 2.8.7 使用代码片断 36 2.9 小结 38 第3章 应用程序和页面框架 39 3.1 应用程序的位置选项 39 3.1.1 内置的Web服务器 39 3.1.2 IIS 40 3.1.3 FTP 41 3.1.4 Web站点需要FrontPage Extensions 42 3.2 ASP.NET页面结构选项 43 3.2.1 内置编码 44 3.2.2 新的后台编码模型 46 3.3 ASP.NET 2.0的Page指令 48 3.3.1 @Page 49 3.3.2 @Master 51 3.3.3 @Control 52 3.3.4 @Import 53 3.3.5 @Implements 54 3.3.6 @Register 55 3.3.7 @Assembly 55 3.3.8 @PreviousPageType 56 3.3.9 @MasterType 56 3.3.10 @OutputCache 56 3.3.11 @Reference 57 3.4 ASP.NET页面的事件
场景:在自定义控件、用户控件、页面、后台代码都会有引用JS的可能,这就会出现混乱或者重复引用的可能。 一个自定义控件,用于在ASPX页面中注册JS: public class Script : Control {   #region 属性   private string m_Src;   ///    /// 脚本文件路径   ///    public string Src   {     get { return m_Src; }     set { m_Src = value; }   }   #endregion   ///    /// 在控件Init的时候将JS路径添加到HttpContext.Current.Items["IncludedJavaScript"]中。   ///    ///    protected override void OnInit(EventArgs e)   {     base.OnInit(e);     if (!string.IsNullOrEmpty(Src))     {       string src = ResolveUrl(Src);       List includedJs = HttpContext.Current.Items["IncludedJavaScript"] as List;       if (null == includedJs)       {         includedJs = new List();         HttpContext.Current.Items["IncludedJavaScript"] = includedJs;       }       if (!includedJs.Contains(src))       {         includedJs.Add(src);       }     }   } } 一个静态类,用于管理JS和在后台代码(cs文件)中注册JS: ///  /// Javascript管理器 ///  public static class JavaScriptManager {   ///    /// 包含JS引用。   ///    ///    public static void Include(params string[] filePaths)   {     HttpContext context = HttpContext.Current;     if (null == context)     {       throw new Exception("HttpContext为空。");     }     System.Web.UI.Page p = context.CurrentHandler as System.Web.UI.Page;     if (null == p)     {       throw new Exception("HttpContext.CurrentHandler不是Page。");     }     IList jss = GetIncludedJavaScript();     string resolveUrl;     foreach (string filePath in filePaths)     {       resolveUrl=p.ResolveUrl(filePath);       if (!jss.Contains(resolveUrl))       {         jss.Add(p.ResolveUrl(resolveUrl));       }     }   }   ///    /// 获取已经包含的JS列表   ///    ///    public static IList GetIncludedJavaScript()   {     HttpContext context = HttpContext.Current;     if (null == context)     {       throw new Exception("HttpContext为空。");     }     IList jss = HttpContext.Current.Items["IncludedJavaScript"] as IList;     if (null == jss)     {       jss = new List();       HttpContext.Current.Items["IncludedJavaScript"] = jss;     }     return jss;   } } 然后写一个基类页面,所有的页面都要继承自这个基类页: public class BasePage : System.Web.UI.Page {   public BasePage() { }   #region 注册/管理JS引用   ///    /// 将引用的JS添加到Page.Head中。   ///    private void InitJS()   {     IList includedJs = JavaScriptManager.JavaScriptManager.GetIncludedJavaScript();     foreach (string jsFilePath in includedJs)     {       var script = new HtmlGenericControl("script");       script.Attributes["type"] = "text/javascript";       script.Attributes["src"] = jsFilePath;       Page.Header.Controls.Add(script);     }   }   ///    /// 在呈现之前注册JS   ///    ///    protected override void OnPreRender(EventArgs e)   {     base.OnPreRender(e);     InitJS();   }   #endregion } 上面是在OnPreRender中将JS注册到Page.Head中的,所以如果在自定义控件中注册JS引用,请在OnPreRender之前引用。 在ASPX页面中注册JS:                                  在CS页面中注册JS: public partial class _Default : BasePage {   protected void Page_Load(object sender, EventArgs e)   {     JavaScriptManager.JavaScriptManager.Include("~/JS/cs.js",       "~/JS/cs.js",       "~/JS/cs.js2",       "~/JS/cs.js");   } }

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧