【问题标题】:How can I include css files from an MVC partial control?如何包含来自 MVC 部分控件的 css 文件?
【发布时间】:2010-09-27 01:41:54
【问题描述】:

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

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

【问题讨论】:

标签: javascript asp.net-mvc css


【解决方案1】:

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

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

【讨论】:

  • 谢谢...这让我发疯了。
  • 这不是我遇到的问题,如果页面上包含特定的部分视图,我希望能够在页面的 部分中包含一个 CSS 链接。如果不需要,我不想在我的母版页中包含所有 css 文件
  • 您没有——您将 ContentPlaceHolder 放在母版页的 head 部分中,然后在包含部分内容的实际页面上,将 CSS 链接添加到相应的 Content 控件。这样它只会被添加到那些真正需要它的页面中。
  • 谢谢,这对于删除所有 CSS 智能感知错误很有用。或者,如果你是个乐观主义者,可以添加 CSS 智能感知。
  • 抱歉,这并不能解决问题,您不能在局部视图中拥有内容控件,它们只能在页面上
【解决方案2】:

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

本文包含有关覆盖 HttpContext.Response.Filter 的信息,这对我很有用。

【讨论】:

    【解决方案3】:

    在渲染部分行之前,调用@import如下:

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

    希望这会有所帮助。


    Just came across this option on Haacked 并记住了您的问题。在局部视图上使用标题的 Content 占位符,然后正常将 CSS 添加到该表单。

    【讨论】:

      【解决方案4】:

      如果您愿意打破一致性,您可以只发出带有部分内容的样式定义。这往往适用于最新的浏览器。

      【讨论】:

      • 是的,但这是我要避免的:)
      【解决方案5】:

      根据您的控件需要多少 CSS / JS,最安全的方法可能是在您的主 CSS 文件中包含额外的样式。节省了到服务器的额外行程,并且应该全部由客户端缓存。我知道这会破坏控件的独立性(造句),但它可能是你最好的选择。

      【讨论】:

        【解决方案6】:

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

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

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

        【讨论】:

          【解决方案7】:

          如果您只有一个控件实例并且没有其他代码想要在母版页的标记中“注入”任何内容,Todd 的答案就可以正常工作。不幸的是,您很少依赖它。

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

          【讨论】:

          • I would suggest you include the all the css files you need in the master page. 这就是那个家伙(和我)试图避免的......
          【解决方案8】:

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

          【讨论】:

            【解决方案9】:

            在您的主模板中包含一个占位符:

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

            在你的掌控中

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

            【讨论】:

            • 很遗憾,您不能将内容控件放在局部视图上,它们只能放在引用母版页的页面上
            猜你喜欢
            • 2012-08-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-01-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-06-02
            相关资源
            最近更新 更多