gpt4 book ai didi

javascript - 我可以在 CaSTLe MonoRails/NVelocity 中以编程方式将标签附加到 中吗?

转载 作者:太空宇宙 更新时间:2023-11-04 16:22:59 25 4
gpt4 key购买 nike

我一直在尝试寻找一种方法,以编程方式将指向外部 CSS 文件的链接添加到 <head> <body> 中标记的标记CaSTLe MonoRails 和 NVelocity View 引擎中的标签。任何人都知道如何做到这一点?

我需要解决这个问题,因为我处理的页面可能包含许多“小部件”,并且每个小部件都将以最佳方式获取额外的 Assets ,例如 JS 和 CSS,而不是将 <link ..>在 body 标签内,并有呈现问题的风险。

最佳答案

此处发布的解决方案无法正常工作。更好的方法是将脚本添加到 httpContext.Current.Items

使用与@jishi 相同的结构:

在您的 View 或 View 组件中,您可以调用如下内容:

$Style.Add("/static/style1.css")

在您的布局中(头部部分):

$Style.Render()

您的助手包含 2 个使用 httpcontext 存储和检索文件列表的简单方法。

    public class StyleHelper
{
public static void Add(string file) {
if (string.IsNullOrWhiteSpace(file))
return;

var obj = HttpContext.Current.Items["AssetFiles"] as List<string>; // get the collection which might be empty
if (obj == null || obj.Count == 0) {
IList<string> list = new List<string>();
list.Add(file.ToLower());
HttpContext.Current.Items.Add("AssetFiles", list); // adds your first asset to your collection and returns
return;
}

if (obj.Contains(file.ToLower()))
return; // asset is already added

// new asset ready to be added to your collection
obj.Add(file.ToLower());
HttpContext.Current.Items.Add("AssetFiles", obj);
}

public string Render() {
var obj = HttpContext.Current.Items["AssetFiles"] as List<string>;
if (obj == null || obj.Count == 0)
return ""; // you never added anything to the collection. Nothing more to do.

// not using linq here for the sake of readability:
string res = string.Empty;
foreach (var item in obj) {
res = res + string.Format("<link rel=\"stylesheet\" {0} />", item);
}
return res;
}

}

在您的 Controller (最好是基本 Controller )中添加:

[Helper( typeof( StyleHelper ), "样式")]公共(public)类 YourController

关于javascript - 我可以在 CaSTLe MonoRails/NVelocity 中以编程方式将标签附加到 <head> 中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6188728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com