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

  • 相关阅读:
    【XShell】xshell 中“快速命令集”的使用
    【Ubuntu】Vritual Box 复制方式克隆
    【Linux】快速清空当前文件
    iOS---友盟推送遇到的坑
    iOS---stringByAddingPercentEscapesUsingEncoding:' is deprecated: first deprecated in iOS 9.0
    iOS---searchBar 搜索框 光标初始位置后移
    iOS---设置输入框的光标位置
    iOS tableviewcell 分割线 偏移和颜色
    iOS---去除url中的反斜扛
    iOS---UISearchBar限制输入字数
  • 原文地址:https://www.cnblogs.com/kevin-h-wang/p/DecryptString.html
Copyright © 2011-2022 走看看