当前位置:  开发笔记 > 编程语言 > 正文

什么是MvcHtmlString,我应该何时使用它?

如何解决《什么是MvcHtmlString,我应该何时使用它?》经验,为你挑选了4个好方法。

该文件对于MvcHtmlString是不是非常有启发性:

表示不应再次编码的HTML编码字符串.

我不清楚这究竟是什么意思.似乎有些HTML帮助器方法会返回一个MvcHtmlString,但我在网上看到的几个自定义帮助程序的例子只返回一个常规字符串.

问题:

什么是MvcHtmlString

我什么时候应该选择MvcHtmlString超过string反之亦然?为什么?



1> Levi..:

ASP.NET 4引入了一种新的代码块语法<%: %>.从本质上讲,<%: foo %>转换为<%= HttpUtility.HtmlEncode(foo) %>.该团队正试图让开发人员使用<%: %>而不是<%= %>尽可能地阻止XSS.

但是,这引入了一个问题,即如果代码块已经对其结果进行编码,则<%: %>语法将对其进行重新编码.这是通过引入IHtmlString接口(.NET 4中的新增功能)来解决的.如果foo() in <%: foo() %>返回IHtmlString,则<%: %>语法不会重新编码它.

MVC 2的助手返回MvcHtmlString,它在ASP.NET 4上实现了接口IHtmlString.因此,当开发人员<%: Html.*() %>在ASP.NET 4中使用时,结果将不会被双重编码.

编辑:

这种新语法的直接好处是您的视图更清晰一些.例如,您可以编写<%: ViewData["anything"] %>而不是<%= Html.Encode(ViewData["anything"]) %>.


两者之间有一个非常小的差异.如果传递空字符串,MvcHtmlString将返回ToString()或ToHtmlString()中的String.Empty.但是,HtmlString将继续返回null.

2> Torbjörn Nom..:

这是一个迟到的答案,但如果有人读这个问题是使用剃须刀,你应该记住的是剃刀默认编码一切,但通过MvcHtmlString在你的HTML帮助器中使用你可以告诉剃刀它不需要编码它.

如果你想让razor不编码字符串使用

@Html.Raw("hi")

反编译Raw(),向我们显示它将字符串包装在HtmlString中

public IHtmlString Raw(string value) {
    return new HtmlString(value); 
}

" HtmlString仅存在于ASP.NET 4中.

MvcHtmlString是一个兼容填充程序,添加到MVC 2以支持.NET 3.5和.NET 4.现在MVC 3只是.NET 4,它是HtmlString的一个相当简单的子类,可能是MVC 2-> 3的源兼容性." 来源



3> mattmc3..:

一个很好的实际用途是你想要自己做HtmlHelper扩展.例如,我讨厌尝试记住标记语法,所以我创建了自己的扩展方法来制作标记:

 _
Public Function CssBlock(ByVal html As HtmlHelper, ByVal src As String, ByVal Optional ByVal htmlAttributes As Object = Nothing) As MvcHtmlString
    Dim tag = New TagBuilder("link")
    tag.MergeAttribute("type", "text/css")
    tag.MergeAttribute("rel", "stylesheet")
    tag.MergeAttribute("href", src)
    tag.MergeAttributes(New RouteValueDictionary(htmlAttributes))
    Dim result = tag.ToString(TagRenderMode.Normal)
    Return MvcHtmlString.Create(result)
End Function

我本可以String从这个方法返回,但如果我有以下会破坏:

<%: Html.CssBlock(Url.Content("~/sytles/mysite.css")) %>

使用MvcHtmlString,使用<%: ... %><%= ... %>将两者都正常工作.



4> SLaks..:

你会使用的MvcHtmlString,如果你想使用原始的HTML传递到MVC的辅助方法和你不想要的helper方法来编码的HTML.

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有