使用.net资源文件时候发生的问题

最近在做一个自定义控件,发生了一个问题,就是在OnPreRender()的时候,需要注册客户端脚本,往往会在控件里加一个属性,设置javascript文件*.js的路径,在使用控件时,页面有可能放到n层的目录底下,有的页面在最上层的目录底下,而每个页面都要修改一下路径,会很麻烦,所以我打算把js封装到dll中。
在custom control的class中,写一个BuildScriptCode()的方法,以下是代码

private string BuildScriptCode()
        
{
            
string result = string.Empty;
            Stream stream 
= this.GetType().Assembly.GetManifestResourceStream("SMQControl.SMQControl.date.js");
            
//这里要说明一下,在"SMQControl.SMQControl.date.js"中,SMQControl.SMQControl.是改资源文件"date.js"的命名空间,这个一定要设置正确。
            StreamReader sr = new StreamReader(stream);
            
try
            
{
                result 
= sr.ReadToEnd();
            }

            
catch
            
{
            }

            
finally
            
{
                sr.Close();
            }

            
return result;
        }

于是,在OnPreRender方法中,注册客户端js。

        protected override void OnPreRender(EventArgs e)
        
{
            
if (!Page.IsClientScriptBlockRegistered("ShowDateWindow"))
            
{
                Page.RegisterClientScriptBlock(
"ShowDateWindow","<SCRIPT language='javascript'>" + BuildScriptCode() +"</SCRIPT>");//调用BuildScriptCode()方法取得js代码。
            }

            
this.Attributes.Add("onchange"string.Format("SetDateValues(document.getElementById('{0}'))"this.ClientID));
            
this.Attributes.Add("onclick"string.Format("LaunchCalendar(document.getElementById('{0}'), document.getElementById('{0}').value)"this.ClientID));
            
base.OnPreRender (e);
        }


还有一点值得注意的地方,就是项目里的date.js的资源文件,一定要在属性里设置Build Action为Embedded Resource,这样在编译的时候才能封装在dll中。

就是这样。

posted @ 2006-11-21 16:29  kchen  阅读(454)  评论(0编辑  收藏  举报