zoukankan      html  css  js  c++  java
  • ASP.NET自定义控件加载资源WebResource问题

    最近项目用日期控件,想把My97的资源文件跟TextBox封装成一个DatePicker控件,其实很简单的意见事情,但是还是用了一天多的时间,主要的问题就是解决资源文件加载的问题。通过一天多的努力,得出下面的结论:

    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久无果。

  • 相关阅读:
    SQL语句-用sql语句得到表中所有字段的名字
    SQL语句-判断数据库中是否有这张表
    Java开发-创建第一个项目hello world
    MFC-一个很简单的程序最小化到托盘,带右键菜单带图标
    Everything SDK-基于名称快速定位文件和文件夹。
    NX二次开发-基于PycharmIDE的NXOpen Python开发环境配置
    手动局域网搭建FTP服务器
    FreeCAD二次开发-基于控制台模式FC外部开发
    FreeCAD二次开发-基于PyQT对话框与FC交互的开发
    实例开发-NX二次开发手动截图工具
  • 原文地址:https://www.cnblogs.com/kevin-h-wang/p/DecryptString.html
Copyright © 2011-2022 走看看