gpt4 book ai didi

asp.net-mvc-4 - @Html.Raw 坚持对引号进行编码

转载 作者:行者123 更新时间:2023-12-02 16:24:47 25 4
gpt4 key购买 nike

MVC4 Razor View 。假定字符串 backgroundImage 设置如下:

backgroundImage = string.Format("background: url('{0}') top left no-repeat;", project.MainImage);

为什么会这样

<div class="spotlight slide teaser-text" id="@slideId" style="@Html.Raw(backgroundImage)">

生产

<div class="spotlight slide teaser-text" id="spotlight-0" style="background: url(&#39;/media/215/spotlight01.jpg&#39;) top left no-repeat;">

Html.Rawnew MvcHtmlStringMvcHtmlString.Create 的行为均类似。

期望它能够产生

<div class="spotlight slide teaser-text" id="spotlight-0" style="background: url('/media/215/spotlight01.jpg') top left no-repeat;">

(注意引号)。

最佳答案

我查看了包含此标记的 razor 模板的已编译 DLL。据我所知,问题是这样的。

Html.Raw 将字符串转换为 HtmlStringHttpUtility.HtmlEncode 对待 IHtmlString 实例的方式与普通字符串不同,因为它不应用 Html 编码。

当在属性上下文中给出以编程方式定义的字符串时,将调用

this.WriteAttribute(...)

具有适合生成属性的数据。该数据的一部分是通过调用 Html.Raw 生成的 HtmlString。另一部分是一个标志,指示该值不是文字。

由于非文字标志状态,WriteAttribute 方法最终会调用 HtmlEncode。但它不是在 HtmlString 上调用此函数,而是在该对象的字符串值上调用此函数。因此,您最终会在输出中得到 HTML 编码值。

在属性的上下文之外,调用

this.Write(...)

这不会遇到同样的问题。所以对我来说这似乎是一个错误(至少如果我已经准确地追踪了它的话)。

关于asp.net-mvc-4 - @Html.Raw 坚持对引号进行编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17597818/

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