gpt4 book ai didi

css - 如何从 ASP.NET MVC 局部 View (服务器端)注入(inject) CSS 文件?

转载 作者:技术小花猫 更新时间:2023-10-29 10:57:55 26 4
gpt4 key购买 nike

我有一个局部 View (.ascx),它应该包含自己的 CSS 文件,因为它在多个其他 View 中使用。如何在页面服务器端注入(inject)样式表,即不使用 JavaScript?

最佳答案

Dario - 由于将其用于局部 View ,您将始终遇到 <head> 的问题文档的部分已经存在,因此无法修改。如果你想保持 WC3 兼容,那么你必须通过 javascript 将任何进一步的 css 放入 head 部分。这可能是理想的,也可能不是理想的(如果您必须在关闭 javascript 的情况下满足下游浏览器的需求)。

您可能提到的主要问题是您不能将 <asp:contentplaceholders>进入你的部分。这很痛苦(虽然可以理解,因为母版页引用会将部分内容与特定母版页联系得太紧密)。

为此,我创建了一个小辅助方法来执行基本的繁重工作,自动将 css 文件放入 head 部分。

编辑 -(根据 Omu 的 js 建议)这是一个不错的小中途之家:

// standard method - renders as defined in as(cp)x file
public static string Css(this HtmlHelper html, string path)
{
return html.Css(path, false);
}
// override - to allow javascript to put css in head
public static string Css(this HtmlHelper html, string path, bool renderAsAjax)
{
var filePath = VirtualPathUtility.ToAbsolute(path);

HttpContextBase context = html.ViewContext.HttpContext;
// don't add the file if it's already there
if (context.Items.Contains(filePath))
return "";

// otherwise, add it to the context and put on page
// this of course only works for items going in via the current
// request and by this method
context.Items.Add(filePath, filePath);

// js and css function strings
const string jsHead = "<script type='text/javascript'>";
const string jsFoot = "</script>";
const string jsFunctionStt = "$(function(){";
const string jsFunctionEnd = "});";
string linkText = string.Format("<link rel=\"stylesheet\" type=\"text/css\" href=\"{0}\"></link>", filePath);
string jsBody = string.Format("$('head').prepend('{0}');", linkText);

var sb = new StringBuilder();

if (renderAsAjax)
{
// join it all up now
sb.Append(jsHead);
sb.AppendFormat("\r\n\t");
sb.Append(jsFunctionStt);
sb.AppendFormat("\r\n\t\t");
sb.Append(jsBody);
sb.AppendFormat("\r\n\t");
sb.Append(jsFunctionEnd);
sb.AppendFormat("\r\n");
sb.Append(jsFoot);
}
else
{
sb.Append(linkText);
}

return sb.ToString();
}

用法:

<%=Html.Css("~/Content/yourstyle.Css")%>

或:

<%=Html.Css("~/Content/yourstyle.Css", true)%> // or false if you want!!

如果一切都失败了,值得一个后袋的方法。也可以调整上面的逻辑以命中 actionfilter 并将 css 添加到响应 header 等,而不是输出 js 字符串。

关于css - 如何从 ASP.NET MVC 局部 View (服务器端)注入(inject) CSS 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3871541/

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