asp.net页面生命周期的理解onprerender

uxspy 2009-05-20 10:06:55

/// <summary>
/// 最后一次HTML改动之前注册js,css
/// </summary>
/// <param name="e"></param>
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
AddCss("Control.css.jquery.dd.css");
AddJs("Control.js.jquery.js", "Control.js.jquery.dd.js");
if (this.Page != null)
{
if (!this.Page.ClientScript.IsStartupScriptRegistered(string.Format("{0}_ExtendDropDownInited", this.ClientID)))
{
this.Page.ClientScript.RegisterStartupScript(this.GetType(), string.Format("{0}_ExtendDropDownInited", this.ClientID), string.Format("<script>MSDropDown.init('#{0}');</script>", this.ClientID));
}
}
}

/// <summary>
/// 向页面添加css引用
/// </summary>
/// <param name="cssNames"></param>
private void AddCss(params string[] cssNames)
{
if (cssNames is string[])
{
if (this.Page == null || this.Page.Header == null)
{
return;
}

foreach (string cssName in cssNames)
{
if (!this.Page.ClientScript.IsStartupScriptRegistered(string.Format("_bpms_{0}_", cssName)))
{
HtmlLink css = new HtmlLink();

css.Attributes.Add("type", "text/css");
css.Attributes.Add("rel", "stylesheet");
css.Attributes.Add("src", this.Page.ClientScript.GetWebResourceUrl(this.GetType(), cssName));

if (this.Page.Header != null)
{
this.Page.Header.Controls.Add(css);
this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), string.Format("_bpms_{0}_", cssName), "");
}
}
}
}
}

/// <summary>
/// 向页面添加js引用
/// </summary>
/// <param name="jsNames"></param>
private void AddJs(params string[] jsNames)
{
if (jsNames is string[])
{
if (this.Page == null || this.Page.Header == null)
{
return;
}

foreach (string jsName in jsNames)
{
if (!this.Page.ClientScript.IsStartupScriptRegistered(string.Format("_bpms_{0}_", jsName)))
{
HtmlGenericControl script = new HtmlGenericControl("script");

script.Attributes.Add("type", "text/css");
script.Attributes.Add("rel", "stylesheet");
script.Attributes.Add("src", this.Page.ClientScript.GetWebResourceUrl(this.GetType(), jsName));

if (this.Page.Header != null)
{
this.Page.Header.Controls.Add(script);
this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), string.Format("_bpms_{0}_", jsName), "");
}
}
}
}
}


这样在我生成的页面中,当我用/WebResource.axd?XXXXXXXX请求js时,页面提示的是下载,而不是直接输出在浏览器中,导致我的<script>标签实际上并没有请求到资源,我很奇怪,我不知道是不是我不改把js和css的添加放在prerender事件中?
...全文
571 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿非 2009-05-21
  • 打赏
  • 举报
回复
昨天死活打不开这个帖子

[Quote=引用 6 楼 ojekleen 的回复:]
引用 5 楼 Sandy945 的回复:
引用 4 楼 ojekleen 的回复:
引用 3 楼 Sandy945 的回复:
在OnPreRender事件 进行JS 注册(往页面输出js代码)是 很优雅的做法


哈哈,那优雅了?


各司其职呀,该谁做的事就用谁做。


喀,为什么要他做?规定过?他做有啥好处?
[/Quote]
PreRender

Before this event occurs:The Page object calls EnsureChildControls for each control and for the page. Each data bound control whose DataSourceID property is set calls its DataBind method. For more information, see Data Binding Events for Data-Bound Controls later in this topic.The PreRender event occurs for each control on the page. Use the event to make final changes to the contents of the page or its controls.

这里可以对控件以及所有内容做最后的修改。


ojekleen 2009-05-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 Sandy945 的回复:]
引用 4 楼 ojekleen 的回复:
引用 3 楼 Sandy945 的回复:
在OnPreRender事件 进行JS 注册(往页面输出js代码)是 很优雅的做法


哈哈,那优雅了?


各司其职呀,该谁做的事就用谁做。
[/Quote]

喀,为什么要他做?规定过?他做有啥好处?
阿非 2009-05-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ojekleen 的回复:]
引用 3 楼 Sandy945 的回复:
在OnPreRender事件 进行JS 注册(往页面输出js代码)是 很优雅的做法


哈哈,那优雅了?
[/Quote]

各司其职呀,该谁做的事就用谁做。
ojekleen 2009-05-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 Sandy945 的回复:]
在OnPreRender事件 进行JS 注册(往页面输出js代码)是 很优雅的做法
[/Quote]

哈哈,那优雅了?
阿非 2009-05-20
  • 打赏
  • 举报
回复
在OnPreRender事件 进行JS 注册(往页面输出js代码)是 很优雅的做法
ojekleen 2009-05-20
  • 打赏
  • 举报
回复
楼主要做的功能是啥?你描述的我不太看明白。。。

OnPreRender和Load的区别是一个在控件事件执行完后,一个在控件事件执行前。但是两个都是在SaveViewState前。
你看看你想要啥结果。。
uxspy 2009-05-20
  • 打赏
  • 举报
回复
OK,自己解决了,原来是这里写错了

HtmlGenericControl script = new HtmlGenericControl("script");

script.Attributes.Add("type", "text/css");
script.Attributes.Add("rel", "stylesheet");
script.Attributes.Add("src", this.Page.ClientScript.GetWebResourceUrl(this.GetType(), jsName));


因为我是复制addcss函数过来的,结果script的属性添加错误,哎,太马虎了
改为script.Attributes.Add("type", "text/javascript");
script.Attributes.Add("language", "javascript");--这个属性也可不加

现在一切OK了

62,046

社区成员

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

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

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

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