And*_*dyC 8 razor asp.net-mvc-4
MVC4剃刀视图.鉴于字符串backgroundImage设置如下:
backgroundImage = string.Format("background: url('{0}') top left no-repeat;", project.MainImage);
Run Code Online (Sandbox Code Playgroud)
为什么这样呢
<div class="spotlight slide teaser-text" id="@slideId" style="@Html.Raw(backgroundImage)">
Run Code Online (Sandbox Code Playgroud)
生产
<div class="spotlight slide teaser-text" id="spotlight-0" style="background: url('/media/215/spotlight01.jpg') top left no-repeat;">
Run Code Online (Sandbox Code Playgroud)
Html.Raw,new MvcHtmlString和MvcHtmlString.Create所有的行为类似.
我希望它能产生
<div class="spotlight slide teaser-text" id="spotlight-0" style="background: url('/media/215/spotlight01.jpg') top left no-repeat;">
Run Code Online (Sandbox Code Playgroud)
(注意引号).
我查看了包含此标记的 razor 模板的已编译 DLL。据我所知,问题是这样的。
Html.Raw将字符串转换为HtmlString. HttpUtility.HtmlEncode对待IHtmlString实例的方式与普通字符串不同,因为它不应用 Html 编码。
当在属性的上下文中给出以编程方式定义的字符串时,将调用
this.WriteAttribute(...)
Run Code Online (Sandbox Code Playgroud)
具有适合生成属性的数据。该数据的一部分是通过调用生成的 HtmlString Html.Raw。另一部分是一个标志,指示该值不是文字。
由于非文字标志状态,该WriteAttribute方法最终调用HtmlEncode. 但它不是在 上调用它HtmlString,而是在该对象的字符串值上调用它。因此,您最终会在输出中得到 HTML 编码值。
在属性的上下文之外,调用
this.Write(...)
Run Code Online (Sandbox Code Playgroud)
而这不会遇到同样的问题。所以对我来说这似乎是一个错误(至少如果我已经准确地追踪了它的话)。
| 归档时间: |
|
| 查看次数: |
2004 次 |
| 最近记录: |