MVC3剃刀表加载在Span / Div / P之外

时间:2012-09-09 15:16:21

标签: asp.net-mvc-3 razor

我遇到问题,我尝试在父容器中呈现<table>,但MVC3 Razor总是呈现容器标记的外部。当尝试通过Javascript控制外部父容器时,这会导致问题。

Razor示例:

<span id="mySpan">
 @Html.Action("Table1", "GetMyTable")
</span>

输出的HTML:

 <span id="mySpan"></span>  
 <table>
  <thead><tr><th>Header</th></tr></thead>
  <tbody>
   <tr><td>Foo</td></tr>
   <tr><td>Bar</td></tr>
  </tbody>
 </table>

无论我尝试将表格粘贴到哪个父容器中,div,span,p,表总是呈现OUTSIDE容器的标签!谁能解释我做错了什么?我应该如何编写Razor语法以在这些标记内正确添加表?

1 个答案:

答案 0 :(得分:1)

当您在Firebug中查看输出时,正在发生的事情是您在浏览器引擎解析后看到html的“有效”视图。 在HTML5中,许多标签不需要显式关闭。如果在另一个无效的内部标记“内部”(如跨度内的表),则浏览器假设您正在使用未封闭的span标记,因此在启动表标记之前会自动为您关闭它。

这里最简单的解决方法是不要“封装”表格,或者用HTML5认为有效的东西包装它,例如节标记。

另一种选择是返回XHTML1.1,其中表在div内有效(但不在span内)。此外,XHTML需要显式的结束标记,因此这种行为不会显示在那里。 (XHTML5也是一样,但在XHTML5中用div包装表仍然无效)

查看原始来源会发现Razor在这里不会改变任何东西;它是浏览器。不过,很高兴见到这一点;所以你知道浏览器的期望以及它如何处理你发送的内容。