|zyciis| 第二贴 如何在ascx中的Init中就直接输出HTML而不是在Render中输出 ,谢谢

zyciis321 2009-04-30 10:03:51
原贴:http://topic.csdn.net/u/20090429/22/711fe17a-1b0c-4959-860d-a5dbcb45433e.html
我想知道一个用户自定义控件ascx文件,在程序加载他的时候最先执行的是什么OnInit吗,然后成生HTML后是哪个事件OnRender吗,谢谢


protected override void OnInit(EventArgs e)
{
String Key = "BrandID=" + BrandID.ToString(); //这里取得自己的自定义属性
String CacheName = "ControlCache_" + "ControlCacheTest_Test" + "_" + Key; //由ControlCache_用户控件命名空间_属性值合成 全成一个Cache关键字
//判断是否有Cache 有就读取
if (Cache[CacheName] != null)
{
String ControlCacheHtml = Context.Cache.Get(CacheName).ToString();
//PreInit->Init->InitComplete->PreLoad->Load->控件事件(如Click)->LoadComplete->PreRender->SaveStateComplete->Render->Unload
//这里怎么直接在Init输出Html内容,而不再执行后台的onload什么就直接输出
//???
}
else
{
//如果没有cache程序正常运行
base.OnInit(e);
}
}

protected override void Render(HtmlTextWriter writer)
{

String Key = "BrandID=" + BrandID.ToString(); //这里取得自己的自定义属性
String CacheName = "ControlCache_" + "ControlCacheTest_Test" + "_" + Key; //由ControlCache_用户控件命名空间_属性值合成 全成一个Cache关键字
//判断是否有Cache 没有添加
if (Cache[CacheName] == null)
{
//没有Cache进行添加到Cache
System.Text.StringBuilder sb = new System.Text.StringBuilder();
System.IO.StringWriter sw = new System.IO.StringWriter(sb);
HtmlTextWriter hw = new HtmlTextWriter(sw);
//将内容插入Cache中,并指定过期时间为6000秒,每有访问继续延长
Context.Cache.Insert(CacheName, sb.ToString(), null, DateTime.Now.AddSeconds(6000), TimeSpan.FromSeconds(6000));
}
base.Render(writer);

}


如在上面//???,怎么写可以直接输出HTML而不再去执行后面的load render..

谢谢
...全文
87 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
cpp2017 2009-04-30
  • 打赏
  • 举报
回复
那个贴子是写了个Panel控件,里面的子控件不需要动.
zyciis321 2009-04-30
  • 打赏
  • 举报
回复

protected override void Render(HtmlTextWriter writer)
{
String Key = "BrandID=" + BrandID.ToString(); //这里取得自己的自定义属性
String CacheName = "ControlCache_" + "ControlCacheTest_Test" + "_" + Key; //由ControlCache_用户控件命名空间_属性值合成 全成一个Cache关键字

//没有Cache进行添加到Cache
System.Text.StringBuilder sb = new System.Text.StringBuilder();
System.IO.StringWriter sw = new System.IO.StringWriter(sb);
HtmlTextWriter hw = new HtmlTextWriter(sw);
base.Render(hw);
//将内容插入Cache中,并指定过期时间为6000秒,每有访问继续延长
Context.Cache.Insert(CacheName, sb.ToString(), null, DateTime.Now.AddSeconds(6000), TimeSpan.Zero);
writer.Write(sb.ToString());
}

Render有误应该为上面这样
谢谢
蓝海D鱼 2009-04-30
  • 打赏
  • 举报
回复
下表提供了控件生命周期中各阶段的高级概述。有关详细信息,请点击表中的链接。


初始化 初始化在传入 Web 请求生命周期内所需的设置。请参见处理继承的事件。 Init 事件(OnInit 方法)

加载视图状态 在此阶段结束时,就会自动填充控件的 ViewState 属性,详见维护控件中的状态中的介绍。控件可以重写 LoadViewState 方法的默认实现,以自定义状态还原。 LoadViewState 方法

处理回发数据 处理传入窗体数据,并相应地更新属性。请参见处理回发数据。
注意 只有处理回发数据的控件参与此阶段。 LoadPostData 方法
(如果已实现 IPostBackDataHandler)

加载 执行所有请求共有的操作,如设置数据库查询。此时,树中的服务器控件已创建并初始化、状态已还原并且窗体控件反映了客户端的数据。请参见处理继承的事件。 Load 事件
(OnLoad 方法)

发送回发更改通知 引发更改事件以响应当前和以前回发之间的状态更改。请参见处理回发数据。
注意 只有引发回发更改事件的控件参与此阶段。 RaisePostDataChangedEvent 方法
(如果已实现 IPostBackDataHandler)

处理回发事件 处理引起回发的客户端事件,并在服务器上引发相应的事件。请参见捕获回发事件。
注意 只有处理回发事件的控件参与此阶段。 RaisePostBackEvent 方法
(如果已实现 IPostBackEventHandler)

预呈现 在呈现输出之前执行任何更新。可以保存在预呈现阶段对控件状态所做的更改,而在呈现阶段所对的更改则会丢失。请参见处理继承的事件。 PreRender 事件
(OnPreRender 方法)

保存状态 在此阶段后,自动将控件的 ViewState 属性保持到字符串对象中。此字符串对象被发送到客户端并作为隐藏变量发送回来。为了提高效率,控件可以重写 SaveViewState 方法以修改 ViewState 属性。请参见维护控件中的状态。 SaveViewState 方法
呈现 生成呈现给客户端的输出。请参见呈现 ASP.NET 服务器控件。 Render 方法
处置 执行销毁控件前的所有最终清理操作。在此阶段必须释放对昂贵资源的引用,如数据库链接。请参见 ASP.NET 服务器控件中的方法。 Dispose 方法
卸载 执行销毁控件前的所有最终清理操作。控件作者通常在 Dispose 中执行清除,而不处理此事件。 UnLoad 事件(On UnLoad 方法)
itcrazyman 2009-04-30
  • 打赏
  • 举报
回复
mark up 先顶再试

62,268

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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