Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC-在布局模板中从部分或正文设置变量 问题_C#_Asp.net Mvc_Razor - Fatal编程技术网

C# ASP.NET MVC-在布局模板中从部分或正文设置变量 问题

C# ASP.NET MVC-在布局模板中从部分或正文设置变量 问题,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,在ASP.NET MVC中,特别是在Razor中,如何在部分或子模板中设置变量的值,并在主模板或布局模板中访问该值 球门 我希望维护资产样式表和JavaScript文件的列表,并能够从部分中添加到列表中。然后,这些资产应该可以在要包含在样式表中的主布局中访问,或者在页面的JavaScript文件末尾附近访问。这提供了一种优雅的方式,将模块存储在包含所有必要资产的部分中 我的尝试 下面是我为样式表所做的尝试。预期的结果是global.css和view_post.css都将包含在标题中,但只显示gl

在ASP.NET MVC中,特别是在Razor中,如何在部分或子模板中设置变量的值,并在主模板或布局模板中访问该值

球门 我希望维护资产样式表和JavaScript文件的列表,并能够从部分中添加到列表中。然后,这些资产应该可以在要包含在样式表中的主布局中访问,或者在页面的JavaScript文件末尾附近访问。这提供了一种优雅的方式,将模块存储在包含所有必要资产的部分中

我的尝试 下面是我为样式表所做的尝试。预期的结果是global.css和view_post.css都将包含在标题中,但只显示global.css。我的理解是,出现这种情况是因为布局是在模板之前呈现的

助手/AssetHelper.cs 视图/Shared/Layout.cshtml Views/Posts/View.cshtml
你不能。布局模板在分区之前呈现。在局部中设置的任何变量都将设置得太晚,布局无法知道它在那里


这似乎是一个过于复杂的解决方案。为什么不使用MVC提供的Web优化工具呢?

你不能。布局模板在分区之前呈现。在局部中设置的任何变量都将设置得太晚,布局无法知道它在那里


这似乎是一个过于复杂的解决方案。为什么不直接使用MVC提供的Web优化工具呢?

。发布问题后,我只需要相关的侧栏:这些答案都没有真正回答你提出的问题。它们只是通过子对象设置css或脚本的简单方法,与在部分中设置变量以及在父对象中使用变量无关。重复的。发布问题后,我只需要相关的侧栏:这些答案都没有真正回答你提出的问题。它们只是通过子对象设置css或脚本的简单方法,与在部分中设置变量并在父对象中使用它(您所问的问题)无关。说您不能做某事并不能回答如何做。仅仅因为你不知道怎么做并不意味着这是不可能的。@AndrewAshbacher-在部分中设置c变量并在布局中使用它是绝对不可能的。因为我回答了你提出的问题而不是你似乎想问的问题而对我投反对票,这是非常糟糕的网络礼仪。是的,你可以通过多种方式在版面中设置脚本,但不能通过你特别提出的问题。这很公平。我以后一定会把实际问题恰当地表达出来。也就是说,这不是一个过于复杂的解决方案,因为它简化了其他地方的大量代码。我们正在使用WebOptimization。但是,我们也希望模块化并提高代码的可重用性。说你不能做某事并不能回答怎么做。仅仅因为你不知道怎么做并不意味着这是不可能的。@AndrewAshbacher-在部分中设置c变量并在布局中使用它是绝对不可能的。因为我回答了你提出的问题而不是你似乎想问的问题而对我投反对票,这是非常糟糕的网络礼仪。是的,你可以通过多种方式在版面中设置脚本,但不能通过你特别提出的问题。这很公平。我以后一定会把实际问题恰当地表达出来。也就是说,这不是一个过于复杂的解决方案,因为它简化了其他地方的大量代码。我们正在使用WebOptimization。但是,我们也希望模块化并提高代码的可重用性。
namespace MyApp.Helpers
{
    public static class AssetHelper
    {

        private static SortedSet<string> StyleSheets(this HtmlHelper helper)
        {
            if (helper.ViewBag._styleSheets == null)
                  helper.ViewBag._styleSheets = new SortedSet<string> ();
            return helper.ViewBag._stylesheets as SortedSet<string>;
        }

        public static MvcHtmlString AddStyleSheet(this HtmlHelper helper, string styleSheet) {
            helper.StyleSheets().Add(styleSheet);
            return new MvcHtmlString("");
        }

        public static MvcHtmlString RenderStyles(this HtmlHelper helper)
        {
            StringBuilder output = new StringBuilder();
            string template = "<link rel=\"stylesheet\" type=\"text/css\" href=\"{0}\" />";

            foreach (string styleSheet in helper.StyleSheets())
                output.Append(String.Format(template, styleSheet));

            return new MvcHtmlString(output.ToString());
        }

    }
}
@using MyApp.Helpers

<html>
  <head>
    ...
    @Html.AddStyleSheet("global.css")
    @Html.RenderStyles()
  </head>
  <body>
    ...
    @RenderBody
    ...
  </body>
</html>
@using MyApp.Helpers
@Html.AddStyleSheet("view_post.css")

<h2>...</h2>
<p>...</p>