为什么Page.ClientScript.RegisterClientScriptInclude放在Render里边不行?

程静涛 2011-12-11 09:29:27
我自定义了一个控件,该控件需要js代码,我将js代码单独放在一个文件中。
使用Page.ClientScript.RegisterClientScriptInclude 进行注册,最开始放在了 Render中,但是总是注册不上,后来又改到 OnPrender里边了,就行了,请问这是为什么?放在这两个里边有什么不同?
代码如下


namespace ControlLibrary
{
public class MyTestControl:WebControl
{
protected override void OnPreRender(EventArgs e)
{
Page.ClientScript.RegisterClientScriptInclude("myjs", "my.js");//这句话如果放在Render里边,生成的页面查看源代码时候,就没有生成<script src="my.js" type="text/javascript" />这句话
base.OnPreRender(e);
}

protected override void Render(HtmlTextWriter writer)
{
//Page.ClientScript.RegisterClientScriptInclude("myjs", "my.js");//不起作用
base.Render(writer);

}
}
}




<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>
<%@ Register Assembly="ControlLibrary" Namespace="ControlLibrary" TagPrefix="cc" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<cc:MyTestControl ID="c" runat="server"/>
</div>
</form>
</body>
</html>



还有一个问题,如果这样的话,我这个自定义的控件和aspx页面并不在一个Project下,所以,js是在ControlLibrary中的,在运行aspx的时候,找不到注册时指定的路径。我想js文件是不是应该做成内嵌资源?但是具体该怎么操作?求指点。
...全文
164 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
程静涛 2011-12-11
  • 打赏
  • 举报
回复
这个我明白,但是为什么放在PreRender中就不行呢?如何解释呢?


[Quote=引用 2 楼 llftc 的回复:]

Render不是一个事件,当程序运行到这个阶段时,Page对象会在每个控件上调用此方法。
所有的asp.net的Web服务器控件都有一个用于写出发送给浏览器的控件标记的Render方法。

而PreRender是一个事件。该事件会对页面或者其控件的内容进行最后的修改。

这个你一定要了解整个asp.net生命周期
[/Quote]
Kelvin峰 2011-12-11
  • 打赏
  • 举报
回复
Render不是一个事件,当程序运行到这个阶段时,Page对象会在每个控件上调用此方法。
所有的asp.net的Web服务器控件都有一个用于写出发送给浏览器的控件标记的Render方法。

而PreRender是一个事件。该事件会对页面或者其控件的内容进行最后的修改。

这个你一定要了解整个asp.net生命周期
litaoso 2011-12-11
  • 打赏
  • 举报
回复
同意楼上的 ...虽然我不会 ..但是我看的还是那么个意思
Kelvin峰 2011-12-11
  • 打赏
  • 举报
回复
Kelvin峰 2011-12-11
  • 打赏
  • 举报
回复
给你发一张图你看一下就知道了


[Quote=引用 3 楼 nndtdx 的回复:]

这个我明白,但是为什么放在PreRender中就不行呢?如何解释呢?


引用 2 楼 llftc 的回复:

Render不是一个事件,当程序运行到这个阶段时,Page对象会在每个控件上调用此方法。
所有的asp.net的Web服务器控件都有一个用于写出发送给浏览器的控件标记的Render方法。

而PreRender是一个事件。该事件会对页面或者其控件的内容进行最后的修改。
……
[/Quote]

62,074

社区成员

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

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

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

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