我试图使用ASP.NET MVC一段时间,然后我面临一个问题,我不想在master页面中包含我所有的js和css。但是,我怎么能从我的特定视图中的主页面的头部注册?ASP.NET MVC中的脚本和CSS注册助手?
回答
默认主页面模板包含头部的Content PlaceHolder。如果没有,你可以轻松地添加一个:
<head runat="server">
<title></title>
<asp:ContentPlaceHolder ID="head" runat="server" />
</head>
你的意见,可以然后把他们的头想要的东西:
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
<script src="Scripts/myScripts.js" type="text/javascript"></script>
<link href="Styles/myStyles.css" rel="stylesheet" type="text/css" />
</asp:Content>
从技术上讲,您应该将所有js放在页面底部以获得最佳性能。
我认为唯一可以做到这一点的方法是将JavaScript包含在VIewData中,并在主页上显示ViewData(不是一个很好的解决方案)。
它看起来并不像有一个简单的选择“内置在'到ASP.NET MVC框架中。如果您正在使用用户控件(.ascx),如果您要创建自包含控件,并且该控件也希望管理自己的JavaScript要求,那么您甚至无法使用占位符来帮助您。
在我创建了一个辅助类的结束,它有两个方法:
private static SortedList<int, string> GetRegisteredScriptIncludes()
{
var registeredScriptIncludes = System.Web.HttpContext.Current.Items["RegisteredScriptIncludes"] as SortedList<int, string>;
if (registeredScriptIncludes == null)
{
registeredScriptIncludes = new SortedList<int, string>();
System.Web.HttpContext.Current.Items["RegisteredScriptIncludes"] = registeredScriptIncludes;
}
return registeredScriptIncludes;
}
public static void RegisterScriptInclude(this HtmlHelper htmlhelper, string script)
{
var registeredScriptIncludes = GetRegisteredScriptIncludes();
if (!registeredScriptIncludes.ContainsValue(script))
{
registeredScriptIncludes.Add(registeredScriptIncludes.Count, script);
}
}
public static string RenderScripts(this HtmlHelper htmlhelper)
{
var registeredScriptIncludes = GetRegisteredScriptIncludes();
var scripts = new StringBuilder();
foreach (string script in registeredScriptIncludes.Values)
{
scripts.AppendLine("<script src='" + script + "' type='text/javascript'></script>");
}
return scripts.ToString();
}
这是它的一个基本形式无论如何,试图证明它的工作方式。它可以在很多方面得到增强,但目前它只是为您滤除重复的脚本插入请求。每当你想在ASCX(或ASPX对这个问题)增加一个新的脚本,你可以这样来做:
<%
Html.RegisterScriptInclude(Url.Content("~/Scripts/MapLayers/MapLayer.js"));
Html.RegisterScriptInclude(Url.Content("~/Scripts/MapLayers/Vehicles.js"));
%>
然后,你需要记住输出他们一旦你完成。这是通过在你的页面的地方,你要输出的脚本标签下面的调用来实现的:
<%=Html.RenderScripts() %>
似乎至今对我的工作。我确实有一半希望渲染问题取决于RenderScripts被调用的位置,尤其是如果不是所有的RegisterScriptIncludes都被调用过,但目前为止它似乎完成了这项工作。如果你最后渲染脚本,那么你应该没有问题。
@Jason:警告,你不应该使用像这样的静态变量...在web上下文中,所有用户和所有页面请求共享静态变量。我很惊讶你的代码没有遇到麻烦。原则是好的,但代码是错误的,会给你带来麻烦。在这种情况下,你应该使用System.Web.HttpContext.Current.Items。有关更多信息,请参见http://www.hanselman.com/blog/ATaleOfTwoTechniquesTheThreadStaticAttributeAndSystemWebHttpContextCurrentItems.aspx。
这里是类似的解决方案的一个杰森给了,但需要vdh_ant的意见考虑在内:
http://frugalcoder.us/post/2009/06/29/Handling-Scripts-in-ASPNet-MVC.aspx
MVC期货目前已建成的helper此...
1.<head>
2. <title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title>
3. <%= Html.Css("BlueTheme/site.css") %>
4. <%= Html.Script("jquery-1.3.2.js") %>
5.</head>
点击此处了解详情:http://blog.osbornm.com/archive/2009/10/12/mvc-script-css-helpers.aspx
马修,
我看了看在Html.Css和Html.Script助手您的博客。我并不是说要批评,但是我没有在博客中看到关于Css和Script助手如何解决这里讨论的问题的任何提示。这里的问题是需要在渲染过程中的任何时刻“注册”脚本引用,并且可能需要多次(在多次使用模板或局部视图并注册自己的脚本的情况下),然后输出汇总的结果,无重复,在一个位置。
如果您的解决方案解决了这个问题,请纠正我一些问题。
--Regards, 肯
我写了这样一个经理MVC,和我的博客上写了一篇关于它:
"JavascriptHelper–Managing JS files for ASP.NET MVC"
更新:我添加了捆绑: "JavascriptHelper:Managing JS files for ASP.NET MVC (With Bundling)"
- 1. 注册Apple帮助手册
- 2. ASP.NET Ajax脚本注册
- 3. ASP.NET MVC和ASP.NET成员:用户注册
- 4. Codeigniter帮助用户注册脚本
- 5. ASP.NET MVC助手扩展和关注点分离
- 6. 如何在zend框架中注册新助手(定制助手)
- 7. ASP.NET mvc RenderAction登录和注册查看
- 8. ASP.NET MVC AcceptVerbs和注册路由
- 9. asp.net mvc autofac注册和解析器
- 10. ASP.net MVC 3用户注册
- 11. ASP.NET MVC UI助手列表和文档
- 12. ASP.NET MVC 3和HTML助手扩展
- 13. PHP注册脚本
- 14. Asp.Net MVC Html助手扩展
- 15. ASP.net MVC html助手扩展?
- 16. 分页助手asp.net mvc
- 17. ASP.NET MVC依赖注入和帮助器
- 18. MVC - 助手和Joomla
- 19. ASP.NET - 脚本和CSS压缩
- 20. ASP.NET gzip脚本和CSS Global.asax
- 21. ZF2注册导航定制助手
- 22. 在MVC 2编辑器模板中正确注册JavaScript和CSS
- 23. ASP.NET MVC中的脚手架控制器
- 24. 什么是助手类和脚本?
- 25. 注册脚本多次
- 26. ScriptManager.RegisterClientScriptBlock注册脚本两次
- 27. 自动注册脚本
- 28. 访问Gravatar图像的ASP.NET MVC助手
- 29. Scala脚本助手库
- 30. MVC @Ajax中的Ajax。助手和JQuery.Ajax
是不是关于ASP.NET MVC而不是Web表单的问题? – 2014-02-23 02:28:42
Razor视图引擎随MVC 3发布。这是*版本3 *,因为在Razor开发/包含之前,该产品的两个完整版本都已发布。在Razor之前,默认视图引擎是ASPX。 – sliderhouserules 2014-02-24 16:56:02