拥有 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的主要内容,如果未能解决你的问题,请参考以下文章
JQuery datepicker() 由 ASP.net 中的 CSS 类动态创建 TemplateFields