在 cshtml 文件中,我将一个字符串分配给一个属性。例如:
<input name="somename" value="@Model.Value">
由于 @Model.Value 字符串可以包含任何 Unicode 字符,因此显然必须对字符串进行编码。 Razor 会自动编码该值吗?我猜它不会或不能,因为我可以轻松地在它后面立即放置一个 @Html.Raw 将整个事情分解为两个标签。
我认为我需要做的是:
<input name="somename" value="@Html.Raw(Html.AttributeEncode(Model.Value))">
那是对的吗?
同样,如果我在脚本的 JavaScript 字符串中嵌入字符串值,我应该使用:
//I could use Ajax instead of HttpUtility here, but Ajax just wraps the same call.
<script>$('id').data('key','@Html.Raw(HttpUtility.JavaScriptStringEncode(Model.Value))');</script>
Razor 默认对字符串执行 HTML 编码。根据将字符串注入 HTML 流的位置,这可能是正确的编码,也可能不是正确的编码。如果它不是正确的编码,那么您需要自己执行正确的编码,并确保返回 MvcHtmlString(即 IHtmlString)以确保 Razor 不影响您的自定义编码。
由于 Razor 使用 HTML 编码,这在技术上与 HTML 属性编码(它是一个子集)不同,因此使用 @Html.Raw(Html.AttributeEncode(Model.Value)) 对 HTML 属性编码值并没有错。同时,这也不是必需的,因为默认的 HTML 编码使用相同的基本格式,并且最终只会对几个字符进行编码,否则不需要在 HTML 属性值中进行编码。
另一方面,在最后一种情况下,将字符串注入 JavaScript 字符串的引号中,HTML 编码绝对是不正确的,因此您肯定需要像我一样自己执行编码:@Html.Raw (HttpUtility.JavaScriptStringEncode(Model.Value))。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)