问题描述
我自定义了一个控件,该控件需要js代码,我将js代码单独放在一个文件中。使用Page.ClientScript.RegisterClientScriptInclude进行注册,最开始放在了Render中,但是总是注册不上,后来又改到OnPrender里边了,就行了,请问这是为什么?放在这两个里边有什么不同?代码如下namespaceControlLibrary{publicclassMyTestControl:WebControl{protectedoverridevoidOnPreRender(EventArgse){Page.ClientScript.RegisterClientScriptInclude("myjs","my.js");//这句话如果放在Render里边,生成的页面查看源代码时候,就没有生成<scriptsrc="my.js"type="text/javascript"/>这句话base.OnPreRender(e);}protectedoverridevoidRender(HtmlTextWriterwriter){//Page.ClientScript.RegisterClientScriptInclude("myjs","my.js");//不起作用base.Render(writer);}}}
<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Default2.aspx.cs"Inherits="Default2"%><%@RegisterAssembly="ControlLibrary"Namespace="ControlLibrary"TagPrefix="cc"%><!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><headrunat="server"><title></title></head><body><formid="form1"runat="server"><div><cc:MyTestControlID="c"runat="server"/></div></form></body></html>
还有一个问题,如果这样的话,我这个自定义的控件和aspx页面并不在一个Project下,所以,js是在ControlLibrary中的,在运行aspx的时候,找不到注册时指定的路径。我想js文件是不是应该做成内嵌资源?但是具体该怎么操作?求指点。
解决方案
解决方案二:
该回复于2011-12-12 11:36:14被版主删除
解决方案三:
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是一个事件。该事件会对页面或者其控件的内容进行最后的修改。……
解决方案六:
解决方案七:
同意楼上的...虽然我不会..但是我看的还是那么个意思