【问题标题】:Is there any way to control the format of HTML generated by MVC 3 custom helper classes?有什么方法可以控制 MVC 3 自定义助手类生成的 HTML 格式?
【发布时间】:2013-07-05 04:17:58
【问题描述】:

我正在使用 MVC 3 进行 Web 开发,在这里当我使用自定义帮助程序类创建 HTML 时,它看起来非常难看。

例如:如果我使用助手构建一个列表,它会给我如下结果:

<ul>
<li>some link 1</li>
<li>some link 2</li>
<li>some link 3</li>
<li>some link 4</li>
</ul>

我需要的是,格式化HTML如下:

<ul>
   <li>some link 1</li>
   <li>some link 2</li>
   <li>some link 3</li>
   <li>some link 4</li>
</ul>

有没有本地方法可以实现这一点?

【问题讨论】:

标签: html asp.net-mvc-3


【解决方案1】:

这无关紧要,因为这只会影响您呈现的标记的人类读者。我不会否认拥有可读的 HTML 是有用的,但是你能证明花费多少时间来让这部分“正确”?

对此有两个主要解决方案:

第一个——处理生成的HTML

使用这种方法,您可以从帮助函数返回 MvcHtmlString,然后通过 HTML 格式化库运行生成的 HTML 片段。这种方法会很慢,因为它必须渲染未缩进的 HTML,然后解析和分析它,然后重新渲染它。如果您使用繁重的库来重新格式化代码或将其发送到外部库进行处理(例如 HtmlTidy 可执行文件),预计页面加载时间最多会增加 10 毫秒。

第二个——修复 HTML 助手

当然,最好的方法是重新实现您的 HTML 助手,以便缩进代码。幸运的是 HTML Helpers 不会太复杂。复制生成的源代码(使用 Reflector)并不难,然后将其粘贴到具有正确缩进的新辅助方法中。

当然,这是假设整个 &lt;ul&gt; 及其所有 &lt;li&gt; 元素是由单个 Helper 调用创建的,而不是您自己在视图文件中省略缩进。

【讨论】:

  • 第二种方法,你的意思是,在构建 HTML 时是否需要添加 \t 和 \n?
  • 是的。你会有这样的东西:HtmlTextWriter wtr; wtr.Write("\r\n\t\t\t&lt;li&gt;");。或wtr.Indent++;.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-04
  • 2011-06-12
  • 2014-09-24
  • 2012-05-10
相关资源
最近更新 更多