首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将CSS或JavaScript文件从视图或局部视图添加到布局标题

将CSS或JavaScript文件从视图或局部视图添加到布局标题
EN

Stack Overflow用户
提问于 2011-02-25 04:27:31
回答 10查看 242.1K关注 0票数 184

布局页眉:

代码语言:javascript
复制
<head>
    <link href="@Url.Content("~/Content/themes/base/Site.css")"
          rel="stylesheet" type="text/css" />
</head>

来自应用程序的视图(AnotherView)需要:

代码语言:javascript
复制
<link href="@Url.Content("~/Content/themes/base/AnotherPage.css")"
      rel="stylesheet" type="text/css" />

AnotherView有一个局部视图(AnotherPartial),它需要:

代码语言:javascript
复制
<link href="@Url.Content("~/Content/themes/base/AnotherPartial.css")"
      rel="stylesheet" type="text/css" />

问:我们如何才能将这些CSS文件链接和AnotherPartial链接添加到布局标题中?

RenderSection不是一个好主意,因为AnotherPage可以有多个Partials。Add all CSS to head是没有用的,因为它会动态变化(它依赖于其他页面)。

EN

回答 10

Stack Overflow用户

发布于 2011-09-09 12:17:39

布局:

代码语言:javascript
复制
<html>
    <head>
        <meta charset="utf-8" />
        <title>@ViewBag.Title</title>
        <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
        <script src="@Url.Content("~/Scripts/jquery-1.6.2.min.js")" type="text/javascript"></script>
        <script src="@Url.Content("~/Scripts/modernizr-2.0.6-development-only.js")" type="text/javascript"></script>
        @if (IsSectionDefined("AddToHead"))
        {
            @RenderSection("AddToHead", required: false)
        }

        @RenderSection("AddToHeadAnotherWay", required: false)
    </head>

查看:

代码语言:javascript
复制
@model ProjectsExt.Models.DirectoryObject

@section AddToHead{
    <link href="@Url.Content("~/Content/Upload.css")" rel="stylesheet" type="text/css" />
}
票数 207
EN

Stack Overflow用户

发布于 2011-03-01 06:15:39

更新https://github.com/speier/mvcassetshelper上提供的基本示例

我们使用以下实现将JS和CSS文件添加到布局页面中。

View或PartialView:

代码语言:javascript
复制
@{
    Html.Assets().Styles.Add("/Dashboard/Content/Dashboard.css");
    Html.Assets().Scripts.Add("/Dashboard/Scripts/Dashboard.js");
}

布局页面:

代码语言:javascript
复制
<head>
    @Html.Assets().Styles.Render()
</head>

<body>
    ...
    @Html.Assets().Scripts.Render()
</body>

HtmlHelper扩展:

代码语言:javascript
复制
public static class HtmlHelperExtensions
{
    public static AssetsHelper Assets(this HtmlHelper htmlHelper)
    {
        return AssetsHelper.GetInstance(htmlHelper);
    }    
}

public class AssetsHelper 
{
    public static AssetsHelper GetInstance(HtmlHelper htmlHelper)
    {
        var instanceKey = "AssetsHelperInstance";

        var context = htmlHelper.ViewContext.HttpContext;
        if (context == null) return null;

        var assetsHelper = (AssetsHelper)context.Items[instanceKey];

        if (assetsHelper == null)
            context.Items.Add(instanceKey, assetsHelper = new AssetsHelper());

        return assetsHelper;
    }

    public ItemRegistrar Styles { get; private set; }
    public ItemRegistrar Scripts { get; private set; }

    public AssetsHelper()
    {
        Styles = new ItemRegistrar(ItemRegistrarFormatters.StyleFormat);
        Scripts = new ItemRegistrar(ItemRegistrarFormatters.ScriptFormat);
    }
}

public class ItemRegistrar
{
    private readonly string _format;
    private readonly IList<string> _items;

    public ItemRegistrar(string format)
    {
        _format = format;
        _items = new List<string>();
    }

    public ItemRegistrar Add(string url)
    {
        if (!_items.Contains(url))
            _items.Add(url);

        return this;
    }

    public IHtmlString Render()
    {
        var sb = new StringBuilder();

        foreach (var item in _items)
        {
            var fmt = string.Format(_format, item);
            sb.AppendLine(fmt);
        }

        return new HtmlString(sb.ToString());
    }
}

public class ItemRegistrarFormatters
{
    public const string StyleFormat = "<link href=\"{0}\" rel=\"stylesheet\" type=\"text/css\" />";
    public const string ScriptFormat = "<script src=\"{0}\" type=\"text/javascript\"></script>";
}
票数 80
EN

Stack Overflow用户

发布于 2017-06-19 11:07:17

您可以在layout中通过RenderSection方法定义分区。

布局

代码语言:javascript
复制
<head>
  <link href="@Url.Content("~/Content/themes/base/Site.css")"
    rel="stylesheet" type="text/css" />
  @RenderSection("heads", required: false)
</head>

然后,除了局部视图之外,您可以将css文件包含在视图的部分区域中。

该部分通过design在视图、中工作,但不在局部视图中工作。

代码语言:javascript
复制
<!--your code -->
@section heads
{
  <link href="@Url.Content("~/Content/themes/base/AnotherPage.css")"
  rel="stylesheet" type="text/css" />
}

如果你真的想在局部视图中使用截面区,你可以按照这篇文章重新定义RenderSection方法。

Razor, Nested Layouts and Redefined Sections – Marcin On ASP.NET

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5110028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档