为什么Page.ClientScript.RegisterClientScriptInclude放在Render里边不行?
我自定义了一个控件,该控件需要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文件是不是应该做成内嵌资源?但是具体该怎么操作?求指点。 --------------------编程问答-------------------- --------------------编程问答-------------------- Render不是一个事件,当程序运行到这个阶段时,Page对象会在每个控件上调用此方法。
所有的asp.net的Web服务器控件都有一个用于写出发送给浏览器的控件标记的Render方法。
而PreRender是一个事件。该事件会对页面或者其控件的内容进行最后的修改。
这个你一定要了解整个asp.net生命周期 --------------------编程问答-------------------- 这个我明白,但是为什么放在PreRender中就不行呢?如何解释呢?
--------------------编程问答-------------------- 给你发一张图你看一下就知道了
[img=D:\360data\重要数据\桌面][/img]
--------------------编程问答-------------------- --------------------编程问答-------------------- 同意楼上的 ...虽然我不会 ..但是我看的还是那么个意思
补充:.NET技术 , ASP.NET