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管理解决方案,抑或是已经提供了,我没有发现?

  • 相关阅读:
    5 Things Every Manager Should Know about Microsoft SharePoint 关于微软SharePoint每个经理应该知道的五件事
    Microsoft SharePoint 2010, is it a true Document Management System? 微软SharePoint 2010,它是真正的文档管理系统吗?
    You think you use SharePoint but you really don't 你认为你使用了SharePoint,但是实际上不是
    Introducing Document Management in SharePoint 2010 介绍SharePoint 2010中的文档管理
    Creating Your Own Document Management System With SharePoint 使用SharePoint创建你自己的文档管理系统
    MVP模式介绍
    权重初始化的选择
    机器学习中线性模型和非线性的区别
    神经网络激励函数的作用是什么
    深度学习中,交叉熵损失函数为什么优于均方差损失函数
  • 原文地址:https://www.cnblogs.com/iwaitu/p/2329104.html
Copyright © 2011-2022 走看看