BFr*_*ree 28 c# asp.net-mvc html-encode razor
使用Razor View Engine,只要您将字符串直接输出到页面,它就是HTML编码的.例如:
@"<p>Hello World</p>"
Run Code Online (Sandbox Code Playgroud)
实际上将输出到页面:
<p>Hello World </p>
Run Code Online (Sandbox Code Playgroud)
哪个会在浏览器中显示为:
<p> Hello World </ p>
这里的问题是,在创建Html帮助程序时,到目前为止,使用旧的aspx视图引擎,我只返回一个字符串,并将其输出到浏览器:
<%= Html.MyCoolHelperMethod(); %>
Run Code Online (Sandbox Code Playgroud)
所以我的问题基本上就是这个.我这样做:
public static IHtmlString MyCoolHelperMethod(this HtmlHelper helper)
{
return new helper.Raw("<p>Hello World</p>");
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我可以在我的cshtml中执行此操作:
@Html.MyCoolHelperMethod();
Run Code Online (Sandbox Code Playgroud)
或者我这样做:
public static string MyCoolHelperMethod(this HtmlHelper helper)
{
return "<p>Hello World</p>";
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我需要在我的cshtml中完成工作:
@Html.Raw(Html.MyCoolHelperMethod());
Run Code Online (Sandbox Code Playgroud)
显然,第一种方法使视图看起来更清晰,但我只是想知道普通模式是否实际上是帮助者返回IHtmlString并且我过去做错了.
mar*_*ind 40
在大多数情况下,您应该返回一个实例IHtmlString.这就是内置助手*所遵循的模式,这意味着帮助者的消费者不需要担心编码不足或过度编码.
Raw您应该只返回一个新的实例,而不是使用该函数HtmlString.
public static IHtmlString MyCoolHelperMethod(this HtmlHelper helper) {
return new HtmlString("<p>Hello World</p>");
}
Run Code Online (Sandbox Code Playgroud)
*请注意,MVC 3实际上MvcHtmlString用作其助手的返回类型,但这是MVC 2天的延迟.(复杂的故事,但简而言之,IHtmlString仅在.NET 4中引入,并且由于MVC 2支持.NET 3.5,MvcHtmlString因此引入了类型作为中间步骤).所有针对MVC 3及更高版本的助手都应该返回IHtmlString.
| 归档时间: |
|
| 查看次数: |
9707 次 |
| 最近记录: |