ASP.NET自定义控件加载资源WebResource问题
2014-07-04 17:42
281 查看
最近项目用日期控件,想把My97的资源文件跟TextBox封装成一个DatePicker控件,其实很简单的意见事情,但是还是用了一天多的时间,主要的问题就是解决资源文件加载的问题。通过一天多的努力,得出下面的结论:
1、自定义控件中,一般只要加载JS文件,但是所有的资源文件都需要在AssemblyInfo.cs中注册。具体方式如下:
1.1、控件中注册JS文件代码:
1.2、AssemblyInfo.cs中注册资源文件代码:
2、如果JS中需要通过相对路径引用CSS文件,那么将资源文件嵌入到DLL的方法是不行的,不能通过相对路径找资源,需要把相对路径改成http://localhost/cmd2.0/WebResource.axd?d=WLbEEdvLp5nx1XFfQ8MUMXnmSqTu_IhZyNtDZskTQa4OjNpOfsH9sqWwz8LLXYpbWPqCID9cFVyVg4I0ha1vNBHPJSbo6jMHbBiUM63WFC2gr6hYonIxQ9r03VB6jhowyzDi23srRj9hfI4sfmUSV3CaI87aJd9Qg28Jy6CH1vC4tAlxqtIpyd7FDaix8-HNNXrnQXgGnjdLQxqPkemk2agkxbQQpwJVEEoCudFcYBM1&t=635400916300729758这种路径。
还有一种方式是,把资源文件放在Web站点目录中,通过相对路径去访问。
3、当遇到http://localhost/cmd2.0/WebResource.axd?d=WLbEEdvLp5nx1XFfQ8MUMXnmSqTu_IhZyNtDZskTQa4OjNpOfsH9sqWwz8LLXYpbWPqCID9cFVyVg4I0ha1vNBHPJSbo6jMHbBiUM63WFC2gr6hYonIxQ9r03VB6jhowyzDi23srRj9hfI4sfmUSV3CaI87aJd9Qg28Jy6CH1vC4tAlxqtIpyd7FDaix8-HNNXrnQXgGnjdLQxqPkemk2agkxbQQpwJVEEoCudFcYBM1&t=635400916300729758这种访问不到的资源时,需要仔细查看注册资源的地方,是不是文件名或者路径不对,如果真的看不出来,可以通过反射System.Web的方式解析这个字符处,看看到底是哪个文件出错了。具体代码如下:
4、解密是需要注意两个问题:
4.1、解密的代码需要在同一个站点中,不能独立于出错的站点来解密。
4.2、最新的4.0版本的System.Web.dll的DecryptString方法有两个参数,不晓得如何用,反正我测试N久无果。
1、自定义控件中,一般只要加载JS文件,但是所有的资源文件都需要在AssemblyInfo.cs中注册。具体方式如下:
1.1、控件中注册JS文件代码:
/// <summary> /// 注册JS /// </summary> /// <param name="e"></param> protected override void OnPreRender(EventArgs e) { Page.ClientScript.RegisterClientScriptInclude("WdatePicker", GetResUrl("WdatePicker.js")); base.OnPreRender(e); } /// <summary> /// 获取JS文件路径 /// </summary> /// <param name="strName"></param> /// <returns></returns> private string GetResUrl(string strName) { return Page.ClientScript.GetWebResourceUrl(GetType(), "Founder.Framework.Web.UI.WebControls.FIDatePicker.Resource." + strName); }
1.2、AssemblyInfo.cs中注册资源文件代码:
//My97资源文件 [assembly: WebResource("Founder.Framework.Web.UI.WebControls.FIDatePicker.Resource.WdatePicker.js", "text/javascript")]
2、如果JS中需要通过相对路径引用CSS文件,那么将资源文件嵌入到DLL的方法是不行的,不能通过相对路径找资源,需要把相对路径改成http://localhost/cmd2.0/WebResource.axd?d=WLbEEdvLp5nx1XFfQ8MUMXnmSqTu_IhZyNtDZskTQa4OjNpOfsH9sqWwz8LLXYpbWPqCID9cFVyVg4I0ha1vNBHPJSbo6jMHbBiUM63WFC2gr6hYonIxQ9r03VB6jhowyzDi23srRj9hfI4sfmUSV3CaI87aJd9Qg28Jy6CH1vC4tAlxqtIpyd7FDaix8-HNNXrnQXgGnjdLQxqPkemk2agkxbQQpwJVEEoCudFcYBM1&t=635400916300729758这种路径。
还有一种方式是,把资源文件放在Web站点目录中,通过相对路径去访问。
3、当遇到http://localhost/cmd2.0/WebResource.axd?d=WLbEEdvLp5nx1XFfQ8MUMXnmSqTu_IhZyNtDZskTQa4OjNpOfsH9sqWwz8LLXYpbWPqCID9cFVyVg4I0ha1vNBHPJSbo6jMHbBiUM63WFC2gr6hYonIxQ9r03VB6jhowyzDi23srRj9hfI4sfmUSV3CaI87aJd9Qg28Jy6CH1vC4tAlxqtIpyd7FDaix8-HNNXrnQXgGnjdLQxqPkemk2agkxbQQpwJVEEoCudFcYBM1&t=635400916300729758这种访问不到的资源时,需要仔细查看注册资源的地方,是不是文件名或者路径不对,如果真的看不出来,可以通过反射System.Web的方式解析这个字符处,看看到底是哪个文件出错了。具体代码如下:
Type type = typeof(System.Web.UI.Page);//获取Page类型 MethodInfo methods = type.GetMethod("DecryptString", BindingFlags.NonPublic | BindingFlags.Static);//获取解密的方法 object obj = Activator.CreateInstance(type, null); object[] args = { this.txtOldValue.Text }; this.txtNewValue.Text = methods.Invoke(obj, args).ToString();
4、解密是需要注意两个问题:
4.1、解密的代码需要在同一个站点中,不能独立于出错的站点来解密。
4.2、最新的4.0版本的System.Web.dll的DecryptString方法有两个参数,不晓得如何用,反正我测试N久无果。
相关文章推荐
- WebResource-asp.net自定义控件引用外部资源方法
- WebResource-asp.net自定义控件引用外部资源方法
- ASP.net 2.0 中 WebResource.axd 管理资源的一些知识点
- Asp.net 组件开发中web资源文件(图片、js)的调用问题
- ASP.net 2.0 中 WebResource.axd 管理资源的一些知识点
- ASP.net 2.0 中 WebResource.axd 管理资源的一些知识点
- ASP.net 2.0 中 WebResource.axd 管理资源的一些知识点
- ASP.net 2.0 中 WebResource.axd 管理资源的一些知识点
- ASP.net 2.0 中 WebResource.axd 管理Image,JS,CSS资源
- ASP.net 2.0 中 WebResource.axd 管理资源的一些知识点
- asp.net站点从2003服务器迁移到2008服务器出现定义了重复的“system.web.extensions/scripting/scriptResourceHandler”节的问题解决
- 创建ASP.NET WEB自定义控件3
- vs2k5 中asp.net "Web Site Administration Tool "使用中遇到的问题
- Asp.net中处理一个站点不同Web应用共享Session的问题
- 提供ASP.NET Web 站点高级编程——提出问题-设计方案-解决方案 源码下载!
- ASP.net "hash.web" 拒绝访问问题
- 我建立第一个Asp.net Web application的时候遇到的问题
- Asp.net中处理一个站点不同Web应用共享Session的问题
- ASP.NET WEB自定义控件
- 创建ASP.NET WEB自定义控件——例程3