/*十有三博客*/
  • 首页
  • 关于本站
  • 网站地图
  • RSS订阅

ASP.NET MVC中MvcHtmlString类的两个疑问:是什么以及怎么使用?

2017-08-10 十有三 0 浏览:1万+ .NET技术 ASP.NET MVC

其实MvcHtmlString这个类在ASP.NET MVC中是经常出现的,只要是使用HtmlHelper帮助器生成的HTML控件,最终返回的值都是一个MvcHtmlString对象。例如在使用Razor模板引擎的视图中,使用诸如@Html.TextBox、@Html.CheckBox、@Html.Editor、@Html.Hidden这类方法生成的input元素,只要在VS中按F12查看方法定义都可以看到返回值类型是MvcHtmlString。

关于HtmlHelper类这里就不再多加说明,可以自己查阅MSDN文档。

至于MvcHtmlString类是什么,MSDN对这个类说明如下:表示当前的HTML编码字符串不应该再次被编码(Represents an HTML-encoded string that should not be encoded again.)。这里我根据自己的理解,啰嗦的说明下:假设当前的ASP.NET MVC项目的视图使用的是Razor模板引擎,默认情况下在视图中输出的字符串都会被进行HTML编码,但是如果返回的是MvcHtmlString类,那么视图引擎就不会在对其进行HTML编码,使其保留原本的内容进行输出!

平时我们在后台中返回一段HTML代码的字符串给View视图界面,如果想要让浏览器正常的解析成HTML元素而不是普通的文本,要么使用@Html.Raw(string value)方法进行操作,要么直接返回一个MvcHtmlString。

HTML编码,又称为HTML转码或者HTML-Encode,如果不明白,这里举个例子:类似<或>这种尖括号,是属于特殊符号,因为HTML标签都是包含在闭合的尖括号中的,例如<div>。如果进行HTML编码,<div>最终会转换成&lt;div&gt;,这样在浏览器中就会被当成普通的文本进行显示。可以看到类似<的特殊符号被进行了转义,这种操作就是进行了HTML编码。顺便罗列其他几个转义:&=&amp;,"=&quot;,©=&copy;。

这里直接贴一段代码进行对比会比较直观点,代码在View视图中直接使用即可;

@{
    string htmlString = "<lable style=\"color:#ff0000\">十有三博客</label>";
    MvcHtmlString mhs = new MvcHtmlString(htmlString);
}
<ol>
    <li>@htmlString</li>
    <li>@mhs</li>
    <li>@Html.Raw(htmlString)</li>
    <li>@HttpUtility.HtmlEncode(htmlString)</li>    
</ol>

结果如下:

MvcHtmlString和Html.Raw效果对比截图

可以看到序列1中的HTML代码字符串是直接被当成普通的文本,输出到视图中就被做了HTML编码。而序列2使用了MvcHtmlString进行定义,序列3使用了System.Web.Mvc.HtmlHelper.Raw(string value)方法,这两个操作的返回结果都是一样的,都能在浏览器中将HTML标签正常的渲染出来。序列4是进行了再编码,主要是为了显示转义后的字符串,方便做对比。

额外提下Raw方法,其实查看源码就会有趣的发现,其内部的实现方法就只是返回一个IHtmlString接口:

/// <summary>
/// Wraps HTML markup in an IHtmlString, which will enable HTML markup to be
/// rendered to the output without getting HTML encoded.
/// </summary>
/// <param name="value">HTML markup string.</param>
/// <returns>An IHtmlString that represents HTML markup.</returns>
[SuppressMessage("Microsoft.Performance", "CA1822:MarkMembersAsStatic", Justification = "For consistency, all helpers are instance methods.")]
public IHtmlString Raw(string value)
{
    return new HtmlString(value);
}

PS:MvcHtmlString类是继承于HtmlString类 

上面啰哩啰嗦讲了一大堆,都在回答是什么。下面要说的是怎么使用这个类,其实文章开头有提到过,HtmlHelper帮助器中生成HTML元素的方法都是返回MvcHtmlString类,所以遇到需要自己扩展HtmlHelper方法的场景,建议直接返回MvcHtmlString类型而不是string字符串类型,防止在视图中又要二次转换。

此外在项目中有需要直接返回HTML代码的也建议直接返回MvcHtmlString类型。例如文章的内容,一般在后台使用HTML富文本编辑器编辑内容后,在前端界面肯定要原样显示,包括排版、图片、字体样式等。如果传给View的数据是string类型,还需要用@Html.Raw方法定义一遍,虽然这样做也可以,不过直接返回MvcHtmlString类会让前端代码看上去更加清爽!


版权声明:本文由十有三创作,采用知识共享许可协议:署名-相同方式共享 4.0 国际(CC BY-SA 4.0)。欢迎转载本文,转载请务必署名-保留作者名称及出处:https://shiyousan.com/post/636379600677530340。


  • 上一篇: ASP.NET MVC 获取及手动更新AntiForgeryToken防伪标记
  • 下一篇: AntiForgeryToken生成过程解析-ASP.NET MVC防伪标记源码学习[上]

相关文章
  • 网站打开出现 Server Error in '/' Application Validation of viewstate MAC failed
  • 在唯一密钥属性“fileExtension”设置为“.”时,无法添加类型为“mimeMap”的重复集合项
  • HttpException (0x80004005): 无法连接到 SQL Server 会话数据库。
  • Visual Studio Community 2013无法折叠代码块
  • 解决IIS ASP.NET 网站发布后出现错误 Unable to connect to any of the specified MySQL hosts
  • ASP.NET MVC使用HTML模板进行静态化操作

文章分类

.NET技术 123 数据库 24 Web前端 21 网站建设运维 37 操作系统与应用 66 程序猿日常 11 开发工具 12 其他随笔 13

文章标签

ASP.NET ASP.NET MVC C# CSS HTML IIS Javascript Linux MongoDB MySql SQL SQL Server Visual Studio Windows系统 版本控制系统 插件工具 服务器 搞笑娱乐 好文分享 软件应用 生活知识 手机问题 随笔 网络知识 网站设计优化 网站维护 养生保健 异常处理 硬件设备 游戏攻略

热门文章

  • IIS8如何安装和使用URL重写工具-URL Rewrite
  • 林蛋大与楚中天,朱肚皮与朱月坡
  • 解决IE11安装升级失败和在安装前需要更新的问题
  • Windows Server 2012无法安装 .NET3.5-安装角色或功能失败,找不到源文件
  • VS重构重命名的快捷键

推荐文章

  • 修改Discuz!NT源码出现'List' is an ambiguous reference(即不明确的引用)错误
  • 总结IIS中使用ARR一些要注意的地方和经验-例如遇到重写规则无效的情况
  • 解决IIS出现HTTP错误500.19:工作进程无法读取 applicationhost.config 或 web.config 文件
  • 使用JavaScript ceil()函数计算分页页码总数
  • Discuz!NT 图像因存在错误而无法显示

友情链接

  • Passingwind的博客
  • 码友网

知识共享许可协议 CC BY-SA 4.0本站作品采用知识共享许可协议:署名-相同方式共享 4.0 国际(CC BY-SA 4.0)。
闽ICP备15003702号
闽公网安备 35020302035102号