Sib*_*Guy 243 .net c# asp.net asp.net-mvc razor
Razor默认编码字符串.没有编码的渲染是否有任何特殊语法?
Luc*_*cas 365
从ASP.NET MVC 3开始,您可以使用:
@Html.Raw(myString)
Run Code Online (Sandbox Code Playgroud)
Mat*_*nes 57
@(new HtmlString(myString))
Run Code Online (Sandbox Code Playgroud)
Jon*_*att 31
除了已经提到的@ Html.Raw(字符串)方法,如果输出MvcHtmlString,它将不会被编码.在将自己的扩展添加到HtmlHelper时,或者从您知道可能包含html的视图模型中返回值时,这非常有用.
例如,如果您的视图模型是:
public class SampleViewModel
{
public string SampleString { get; set; }
public MvcHtmlString SampleHtmlString { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
对于Core 1.0+(和MVC 5+),使用HtmlString
public class SampleViewModel
{
public string SampleString { get; set; }
public HtmlString SampleHtmlString { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后
<!-- this will be encoded -->
<div>@Model.SampleString</div>
<!-- this will not be encoded -->
<div>@Html.Raw(Model.SampleString)</div>
<!-- this will not be encoded either -->
<div>@Model.SampleHtmlString</div>
Run Code Online (Sandbox Code Playgroud)
Ton*_*all 10
请@Html.Raw()谨慎使用,因为编码和安全性可能会带来更多麻烦.我理解用例,因为我必须自己做,但要小心......只是避免允许所有文本通过.例如,仅保留/转换特定字符序列,并始终对其余字符进行编码:
@Html.Raw(Html.Encode(myString).Replace("\n", "<br/>"))
Run Code Online (Sandbox Code Playgroud)
然后,您可以放心,您没有创建潜在的安全漏洞,并且在所有浏览器中都能正确显示任何特殊/外来字符.
对于ActionLink,通常在链接文本上使用HttpUtility.Encode。在这种情况下HttpUtility.HtmlDecode(myString)
,当使用HtmlActionLink解码要传递的字符串时,可以使用
它为我工作。例如:
@Html.ActionLink(HttpUtility.HtmlDecode("myString","ActionName",..)Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
111369 次 |
| 最近记录: |