zoukankan      html  css  js  c++  java
  • asp.net mvc 动态注册脚本

    WebForm下的ScriptManager在ASP.net MVC下自然是不能使用的。于是很多人开始困惑如何管理页面上可能发生冲突的脚本。CodePlex上还有一个项目专门做这件事情,当然也有人简单地通过HtmlHelper来解决。如果你看过jQuery UI Extensions for ASP.NET MVC,或者是jQuery Grid for ASP.NET MVC,你还会找到更多的解决方案。总体上讲,这些解决方案的特点是:

      1.用一个词典管理已经注册的脚本项,最后再一次性生成所有注册的脚本。所以,你不能漏了在mastERPage的bady的最后运行脚本生成。

      2.脚本在页面的body区而不是head区。

      思考半天,感觉复杂了一点。我的解决方案比较简单,每次注册脚本调用一个扩展足够了。

      代码


     public static ScriptManagementExtension 
      { 
      private const string ScriptFormat = "\t"; 
      private const string CSSFormat = "\t"; 
      private static string IncludeHeader(HtmlHelper helper, string key, string path, string format) 
      { 
      var context = helper.ViewContext.HttpContext; 
      var exists = context.Items.Contains(key); 
      if (!exists) 
      { 
      var url = new UrlHelper(helper.ViewContext.RequestContext, helper.RouteCollection); 
      context.Items[key] = true; 
      return string.Format(format, url.Content(path)); 
      } 
      return null; 
      } 
      public static string IncludeScript(this HtmlHelper helper, string path) 
      { 
      return IncludeScript(helper, path.ToLower(), path); 
      } 
      public static string IncludeScript(this HtmlHelper helper, string key, string path) 
      { 
      return IncludeHeader(helper, key, path, ScriptFormat); 
      } 
      public static string IncludeCSS(this HtmlHelper helper, string path) 
      { 
      return IncludeCSS(helper, path.ToLower(), path); 
      } 
      public static string IncludeCSS(this HtmlHelper helper, string key, string path) 
      { 
      return IncludeHeader(helper, key, path, CSSFormat); 
      } 
      }

      使用的时候在masterPage的head区域加入一个占位标记:


     <asp:ContentPlaceHolder ID="ScriptContent" runat="server" />

      然后在每个view中你都可以通过下面的代码来注册脚本了:

    <%= Html.IncludeCSS("http://www.cnblogs.com/Content/Site.css") %>


    <%= Html.IncludeCSS("http://www.cnblogs.com/Content/Site.css") %> 
    <%= Html.IncludeCSS("http://www.cnblogs.com/Content/ui.jqgrid.css")%> 
    <%= Html.IncludeCSS("jQuery_Theme", Html.GetThemePath()) %> 
    <%= Html.IncludeScript("http://www.cnblogs.com/Scripts/jquery-1.3.2.min.js")%> 
    ...

      当然,我也有我的困惑。我的困惑就是,为什么Microsoft没有直接提供Script管理解决方案,抑或是已经提供了,我没有发现?

  • 相关阅读:
    斯坦福ML公开课笔记15—隐含语义索引、神秘值分解、独立成分分析
    [cocos2d-x]屏幕自适应解决的方法
    【机器学习实验】学习Python来分类现实世界的数据
    按花生酱,赞不绝口——敏捷12准则的敏捷解释
    linux命令笔记之ls
    HTML5 Canvas动画效果实现原理
    互联网+时代的人生必修课—逆商
    WebService的相关使用
    将一个链表中的结点依照奇偶分成两个链表
    web开发性能优化---用户体验篇
  • 原文地址:https://www.cnblogs.com/iwaitu/p/2329104.html
Copyright © 2011-2022 走看看