如何从MVC部分控件中包含css文件?

时间:2008-12-15 23:28:20

标签: javascript asp.net-mvc css

我正在使用ASP.NET MVC并且我有一个部分控件需要一个特定的CSS&包含JS文件。有没有办法让父页面在页面的“head”部分呈现scriptlink标签,而不是仅仅在部分控制中将它们内联呈现?

为了阐明我想要包含文件的控件是从具有Html.RenderPartial的视图呈现的,因此不能对其进行服务器端内容控制。我希望能够将这些文件包含在html head部分中,以避免验证问题。

9 个答案:

答案 0 :(得分:8)

如果我在局部视图中对CSS / Javascript有要求,我只需确保任何可能包含部分视图的页面,无论是直接还是从AJAX检索的内容,都包含在其标题中的CSS / Javascript。如果页面有母版页,我会在母版页页眉中添加内容占位符,并在子页面中填充它。为了在局部视图中获取intellisense,我在局部视图中添加了CSS / Javascript包含但是用if (false)代码块包装,因此它们不包含在运行时。

<% if (false) { %>
   <link href=...
   <script type=...
<% } %>

答案 1 :(得分:3)

http://www.codeproject.com/Articles/38542/Include-Stylesheets-and-Scripts-From-A-WebControl-.aspx

本文包含有关重写HttpContext.Response.Filter的信息,这对我来说非常有用。

答案 2 :(得分:2)

在渲染部分行之前,请按以下方式调用@import

<style type="text/css>
    @import url(cssPath.css);
</style>

希望这有帮助。


Just came across this option on Haacked并记住了你的问题。在部分视图上使用标题的Content占位符,只需将CSS添加到该表单中。

答案 3 :(得分:0)

如果您愿意违反一致性,则可以使用部分内容发出样式定义。这往往适用于最新的浏览器。

答案 4 :(得分:0)

根据您的控件需要多少CSS / JS,最安全的路径可能只是在主CSS文件中包含额外的样式。节省额外的服务器之旅,它应该全部由客户端缓存。我知道这可以杀死控件的自包含(硬币短语),但这可能是你最好的选择。

答案 5 :(得分:0)

抱歉,您不能从部分控制中将“向上”引用到父页面中的某些内容(或添加任何内容)。通过传递ViewData / Model,唯一的通信是从父级到“部分”“向下”。

您正在使用内容占位符描述母版页和普通页面的功能,但部分控件的功能不同。

但是,如果我没有弄错,你可以将脚本或链接标签物理地添加到你呈现部分页面的实际父页面上 - 部分页面也应该使用CSS。

答案 6 :(得分:0)

Todd的答案很好,只要您只有一个控件实例,并且没有其他代码想要在主页的标签中“注入”任何内容。不幸的是,你很少依赖它。

我建议您在母版页中包含所需的所有css文件。在第一次访问时会有一个小的性能,但之后浏览器缓存将会启动。您可以(并且应该)将您的样式拆分为多个.css文件,以便从可以将它们简洁地下载的HTTP代理中受益。至于.js文件,我建议实现一些接近google.load()机制的东西,它允许你按需加载脚本。

答案 7 :(得分:0)

我是MVC的新手......我最近遇到了挑战。我使用MVC View Page而不是部分视图,添加了自己的母版页(因为我有一个跨多个视图共享的css)并将css添加到master。希望这些信息有所帮助。

答案 8 :(得分:-2)

在主模板中加入占位符:

<head runat="server>
    <asp:ContentPlaceHolder ID="head" runat="server" />
</head>

并在您的控制中

<asp:Content ID="head" runat="server">
    <script src="something.js"></script>
</asp:Content>