【问题标题】:Clean way of having jquery includes with ASP.Net MVC拥有 jquery 的干净方式包括 ASP.Net MVC
【发布时间】:2010-09-21 10:53:13
【问题描述】:

你们是如何处理使用 jQuery 包括的

<script type="text/javascript" src="jquery.js"></script>

在 Asp.Net MVC 中使用部分视图/视图控件时?基本上,我不想让 jquery 包含在母版页中,因为我没有在所有视图中使用 jquery,但我还想要一种简单的方法让用户控件能够在右侧创建 jquery 包含位置('head')而不创建重复的 jquery 包含。

最好的方法是使用 ScriptManaager,但我不想在我的应用程序中依赖 ASP.Net Ajax。是否有我可以使用的“轻量级”ScriptManager 也允许新发布的 jquery 智能感知?

我创建了一个提供此功能的 WebControl,但我没有获得对 VS2008 的智能感知支持,我真的很想要。

希望这是有道理的。

【问题讨论】:

    标签: jquery asp.net-mvc


    【解决方案1】:

    如果您在大部分页面中使用 JQuery,我只会将它放在母版页中。它只会被下载一次,此时它会缓存在浏览器上,并且对渲染页面的性能影响可以忽略不计。

    【讨论】:

      【解决方案2】:

      不知道如何仅使用部分视图执行此操作,尽管您可以使用现有技术逐页执行此操作。

      您可以在您的母版页中的 head 标记内创建一个 ContentPlaceHolder。比在您的用户控件中只需将 jQuery 包含在您页面的 ContentPlaceHolder 内容区域中。

      【讨论】:

        【解决方案3】:

        啊,试图发布这个让我发疯了,因为它被视为页面的一部分......但是

        <script src="<%=Url.Content("~/Content/js/jquery-1.2.3.min.js") %>" type="text/javascript"></script>
        

        【讨论】:

          【解决方案4】:

          你总是可以这样做的:

          在每个页面中创建一个轻量级的 util.js,你可以在其中放置各种常见的东西,加上这个:

          function loadJSInclude(scriptPath, callback)
          {
              var scriptNode = document.createElement('SCRIPT');
              scriptNode.type = 'text/javascript';
              scriptNode.src = scriptPath;
          
              var headNode = document.getElementsByTagName('HEAD');
              if (headNode[0] != null)
                  headNode[0].appendChild(scriptNode);
          
              if (callback != null)    
              {
                  scriptNode.onreadystagechange = callback;            
                  scriptNode.onload = callback;
              }
          }
          

          那么,在你看来,只需放置:

          <script type='text/javascript'>
              if(typeof(someJqueryObject) == "undefined")        
                  loadJSInclude('jquery.js', doYourStuff);        
              else        
                  doYourStuff();
          
              function doYourStuff()
              {
                  // jQuery will be loaded now, so you can do your stuff here.
              }
          </script>
          

          【讨论】:

          • 但是你不会得到很好的智能感知
          猜你喜欢
          • 2017-04-26
          • 2011-05-07
          • 2010-10-16
          • 1970-01-01
          • 2013-08-08
          • 2013-02-18
          • 2019-11-22
          • 1970-01-01
          • 2010-11-19
          相关资源
          最近更新 更多