gpt4 book ai didi

c# - 为什么我的 MvcHtmlString 内容被转义了?

转载 作者:太空宇宙 更新时间:2023-11-03 23:39:46 24 4
gpt4 key购买 nike

我写了一个 HtmlHelper 扩展方法,它读取 CSS 文件的内容并将其包装到一个 <style> 中。标签:

public static IHtmlString EmbedCss(this HtmlHelper htmlHelper, string cssFile)
{
var httpContext = htmlHelper.ViewContext.RequestContext.HttpContext;
var physicalCssFileName = httpContext.Server.MapPath(cssFile);

if (!File.Exists(physicalCssFileName))
{
throw new FileNotFoundException(
string.Format("Requested CSS file \"{0}\" is not found",
physicalCssFileName));
}

var css = File.ReadAllText(physicalCssFileName);
var tb = new TagBuilder("style");
tb.Attributes["type"] = "text/css";
tb.SetInnerText(css.TrimStart(' ').TrimEnd(' '));
return MvcHtmlString.Create(tb.ToString());
}

然后我在 View 中调用这个方法:

@Html.EmbedCss("~/assets/css/critical.css")

CSS 文件中的引号和双引号字符被编码为 &#39;&quot;分别。

如果我用以下代码替换扩展方法的调用,则输出中的引号字符不会被编码:

<style>
@Html.Raw(File.ReadAllText(Server.MapPath(("~/assets/css/critical.css"))))
</style>

谁能解释为什么我的扩展方法会转义输出?

最佳答案

您正在使用 TagBuilder.SetInnerText() ,它对输入进行 html 编码:

Sets the InnerHtml property of the element to an HTML-encoded version of the specified string.

只需将字符串分配给 TagBuilder.InnerHtml直接按原样设置文本:

Gets or sets the inner HTML value for the element.

Remarks

To HTML-encode a string before setting the InnerHtml property to the string, use the SetInnerText(String) method.

关于c# - 为什么我的 MvcHtmlString 内容被转义了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29470199/

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