- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我目前正在使用类似于以下代码的方法将脚本和 css 文件添加到布局文件的头部。
public static class HtmlHelperExtensions
{
public static MyCompanyHtmlHelpers MyCompany(this HtmlHelper htmlHelper)
{
return MyCompanyHtmlHelpers.GetInstance(htmlHelper);
}
}
public class MyCompanyHtmlHelpers
{
private static MyCompanyHtmlHelpers _instance;
public static MyCompanyHtmlHelpers GetInstance(HtmlHelper htmlHelper)
{
if (_instance == null)
_instance = new MyCompanyHtmlHelpers();
_instance.SetHtmlHelper(htmlHelper);
return _instance;
}
private HtmlHelper _htmlHelper;
public ItemRegistrar Styles { get; private set; }
public ItemRegistrar Scripts { get; private set; }
public MyCompanyHtmlHelpers()
{
Styles = new ItemRegistrar(ItemRegistrarFromatters.StyleFormat);
Scripts = new ItemRegistrar(ItemRegistrarFromatters.ScriptFormat);
}
private void SetHtmlHelper(HtmlHelper htmlHelper)
{
_htmlHelper = htmlHelper;
}
}
public class ItemRegistrar
{
private readonly string _format;
private readonly List<string> _items;
public ItemRegistrar(string format)
{
_format = format;
_items = new List<string>();
}
public ItemRegistrar Add(string url)
{
if (!_items.Contains(url))
_items.Insert(0, 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 ItemRegistrarFromatters
{
public const string StyleFormat = "<link href=\"{0}\" rel=\"stylesheet\" type=\"text/css\" />";
public const string ScriptFormat = "<script src=\"{0}\" type=\"text/javascript\"></script>";
}
使用 Html.MyCompany().Styles.Add("/Dashboard/Content/Dashboard.css");
添加文件...和 @Html.MyCompany().Styles.Render()
在 Layout_.cshtml 中呈现它们。
我的问题是这是一个静态方法,这意味着它会保留样式表和脚本文件列表。
我需要做同样的事情,但不要让它持久化。
我需要根据每个请求重新制作列表,因为它们会逐页更改特定页面上的外观。
是否可以在添加所需脚本之前或可能在呈现脚本之后清除每个请求的列表?
更新:不使用部分、RenderPartial 或 RenderaActions 的原因是为了防止将相同的样式表或脚本文件多次添加到布局文件中。
我正在构建的网站有一个带有基本布局的 Layout_.cshtml。这又被循环遍历项目列表的 View 使用,并且对于每个项目,调用 RenderAction 输出该项目的特定部分 View 。这些部分 View 有时需要添加样式表和脚本。
因为可能需要从不同的局部 View 添加许多不同的脚本和样式表,所以我认为样式和脚本的全局列表是唯一可以做到这一点的方法,所以有一个全局位置可以检查脚本是否已添加是否添加到集合中,然后按照添加的顺序一次渲染它们。
更新 2:真正的问题是如何在不使用静态扩展方法的情况下执行相同类型的功能(全局列表)。
最佳答案
我会用部分来做到这一点,即
@section head {
...add whatever you want here...
}
并从布局中渲染“head”部分:
<head>
...other stuff here...
@RenderSection("head", required: false)
</head>
如果您不想要部分,也不想传递它,我会在这里使用 HttpContext;针对 HttpContext.Current.Items[someKey]
存储一些数据。如果为空,则创建一个新的并将其存储在上下文中。
例如:
public static MyCompanyHtmlHelpers GetInstance(HtmlHelper htmlHelper)
{
const string key = "MyCompanyHtmlHelpersInstance";
IDictionary items = (htmlHelper == null || htmlHelper.ViewContext == null
|| htmlHelper.ViewContext.HttpContext == null)
? HttpContext.Current.Items : htmlHelper.ViewContext.HttpContext.Items;
MyCompanyHtmlHelpers obj = (MyCompanyHtmlHelpers)items[key];
if (obj == null)
{
items.Add(key, obj = new MyCompanyHtmlHelpers());
}
return obj;
}
关于c# - 尝试从局部 View 将 JS 和 CSS 添加到 MVC 3 Razor 网站中的布局文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5312759/
如果我们定义一个像这样的函数 (defun foo(x) (setf x somevalue)) x 定义为局部变量还是全局变量?使用 setf/q 将值设置为全局值。如果它是全局的,谁能告诉我如
仍在学习 MVC3、EF。现在我正在连接到 MySql,但我相信这无关紧要。为简单起见,我决定为我的测试应用程序使用一个数据库,并且我包含了一个类别来区分数据。例如,我有一个新闻、事件、信息和页面类别
假设我定义了以下代码: int *func() { int *p=(int *)malloc(sizeof(int)); // memory is allocated from heap
我正在构建一个小型 PHP MVC,但我在一小部分编码方面碰壁了。我想我需要“局部 View ”,但我也许可以用现有代码实现一些东西。 目前我的 Controller 是最简单的形式: 实例化一个对象
假设我定义了以下代码: int *func() { int *p=(int *)malloc(sizeof(int)); // memory is allocated from heap
我有以下代码(用 Python 2.X 编写): def banana(x): def apple(stuff): x /= 10 return stuff -
我正在尝试重用一些代码,部分 View 似乎是使用 MVC 时执行此操作的最佳方式。 我创建了一个继承自 IEnumerable 的局部 View (见下文)。 @model IEnumerable
局部 const 变量将存储在哪里?我已经验证过,函数中使用 const 变量的每个位置都会被其值替换(如立即值寻址模式)。但如果指针被分配给它,那么它就会存储在堆栈中。在这里我不明白处理器如何知道其
我想将局部变量用作全局变量,有人告诉我这样做的方法是在函数外部创建变量,如下所示: var foo = null; function bar() {
我正在处理一个很长的 Angular 表格。我想知道我是否可以将它分成许多不同的 View 并在主视图中引用它们中的每一个。 First Section
我有一个导航栏,它是一个局部 View ,我需要在设计页面上呈现它,以便用户编辑他们的个人资料。事实上,我只有一个页面,但是添加执行帐户维护的路径搞乱了我的导航栏加载,因为实例变量不存在。无论如何,我
我没有用到全局变量,也从未明确定义过全局变量,但我的代码中似乎有一个。你能帮我把它做成本地的吗? def algo(X): # randomized algorithm while len(X
假设我有这个(当前无返回)函数: def codepoint_convert(text, offset): codepoint = text[offset] if codepoint
我在我的项目中同时使用了局部 View 和布局概念,但我无法区分。但我的感觉是两者都在做同样的工作。任何人都可以通过示例说出有关局部 View 和布局的简要概念以及区别吗? 最佳答案 除了 Josh
使用全局变量会加快速度吗?在英特尔的体系结构软件开发人员手册(关于微处理器)中建议使用局部变量而不是全局变量。但是,请考虑以下代码: void process_tcp_packets(void) {
我有一个局部 View 使用的模型与我在其中呈现它的 View 不同。我不断收到错误消息。 The model item passed into the dictionary is of type '
我在 cshtml 页面上有一个局部 View ,如下所示:- @model MvcCommons.ViewModels.CompositeViewModel @{ ViewBag.Title = "
我在从 while 循环全局更新数组时遇到问题,如下所述。请注意,我只能使用 C 95 及之前版本的功能。任何帮助将不胜感激!满浆箱http://pastebin.com/ss6VgTCD 在我的程序
我想刷新 Json 局部 View 。我正在尝试使用这个: $('#example123').load('@Url.Action("Rejestracja", "Logowanie")'); 但不能正
我有一个 asp.net 页面,它返回我当前正在使用的选项卡中的部分 View 。我已经设置了所有 jQuery 并且可以正常工作。它工作一次并通过 ajax 返回一个局部 View .html(re
我是一名优秀的程序员,十分优秀!