asp.net-mvc-5 – 我需要在MVC Razor中编码属性值吗?

在cshtml文件中,我将一个字符串分配给一个属性.例如: input name=somename value=@Model.Value 由于@ Model.Value字符串可以包含任何Unicode字符,因此显然必须对字符串进行编码. Razor会自动编码这个值吗?我猜它不会或不会因为我可以很容易地在它之后放一个

在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)).

作者: dawei

【声明】:永州站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

为您推荐

联系我们

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: xwei067@foxmail.com

工作时间:周一至周五,9:00-17:30,节假日休息

返回顶部