当前位置:编程学习 > C#/ASP.NET >>

为什么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中就不行呢?如何解释呢?


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

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

这个你一定要了解整个asp.net生命周期
--------------------编程问答-------------------- 给你发一张图你看一下就知道了
[img=D:\360data\重要数据\桌面][/img]

引用 3 楼 nndtdx 的回复:
这个我明白,但是为什么放在PreRender中就不行呢?如何解释呢?


引用 2 楼 llftc 的回复:

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

而PreRender是一个事件。该事件会对页面或者其控件的内容进行最后的修改。
……
--------------------编程问答-------------------- --------------------编程问答-------------------- 同意楼上的 ...虽然我不会 ..但是我看的还是那么个意思
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,