拥有 jquery 的干净方式包括 ASP.Net MVC

Posted

技术标签:

【中文标题】拥有 jquery 的干净方式包括 ASP.Net MVC【英文标题】:Clean way of having jquery includes with 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 的智能感知支持,我真的很想要。

希望这是有道理的。

【问题讨论】:

【参考方案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>

【讨论】:

但是你不会得到很好的智能感知

以上是关于拥有 jquery 的干净方式包括 ASP.Net MVC的主要内容,如果未能解决你的问题,请参考以下文章

活动菜单项 - asp.net mvc3 母版页

JQuery datepicker() 由 ASP.net 中的 CSS 类动态创建 TemplateFields

使用 ASP.NET MVC 数据绑定视图模型显示 JQuery 对话框的最佳方式

截断查询字符串并返回干净的 URL C# ASP.net

Jquery .each() 包括寻找干净代码的延迟

如何使用 jquery unobtrusive 和 Asp.Net Mvc 验证动态生成的单选按钮组?