在Razor Helpers中进行HTML解析

时间:2012-09-20 16:55:38

标签: c# html parsing razor

我有以下代码,

@helper Category(IGroup group)
{
  if (!group.Exist)
  {
    return;
  }
  var colors = AppContext.Settings.Colors.Charts.Net;
  var css = group.Name.Replace(" ", String.Empty).ToLower();
  var id = css.ToUpper() + "_";

  <tr>
        <td class="summarygridbackground" style="font-weight:bold;">@group.Name</td>
    </tr>
  foreach(var category in group.Categories)
  {
        <tr id="@id@category.Id" class="summarygridbackground">
        <td class="category">
            <div style="float:left">@category.Name</div>
            <div class="hovericon">@FormatAs.Currency(category.TotalValue)</div>
    </td>
      </tr>
  }
    <tr class="summarygridbackground">
      @switch(css)
        {
          case "inv":
            <text>
              <td class ="@css" style="color: @colors.Inv.html">
            </text>
            break;
          case "other":
            <text>
              <td class ="@css" style="color: @colors.Other.html">
            </text>
            break;
          case "lib":
            <text>
              <td class ="@css" style="color: @colors.Lib.html">
            </text>
            break;
          case "net":
            <text>
              <td class ="@css" style="color: @colors.Net.html">
            </text>
            break;
          default:
            <text>
              <td class="@css">
            </text>
            break;
        }

          <div style="float:left; padding-left:12px;"> Total @group.Name</div>
            <div style="float:right; padding-right:10px;">@FormatAs.Currency(group.TotalValue)</div>
        </td>
    </tr>
}

目前,当我加载视图时,代码在帮助程序的最后一行失败,并显示以下消息:

  

分析器错误   说明:解析为此&gt;请求提供服务所需的资源时发生错误。请查看以下特定的解析错误详细信息,并相应地修改源&gt;文件。

     

“分析器错误消息:遇到结束标记”tr“,没有匹配的开始   标签。您的开始/结束标签是否正确平衡?

     

来源错误:

     

第65行:@ FormatAs.Currency(group.TotalValue)行   66:第67行:第68行:}“

当我删除最后一行的最后</tr>时,它会失败并显示以下消息:

  

分析程序错误说明:解析a期间发生错误   服务此请求所需的资源。请查看以下内容   特定的解析错误详细信息并修改您的源文件   适当。

     

分析器错误消息:“tr”元素未关闭。所有元素   必须是自我关闭或具有匹配的结束标记。

     

来源错误:

     

第32行:第33行:}第34行:第35行:@switch(css)

我无法理解,这是整个帮助器方法,它看起来与我平衡,并且对此助手的所有调用都先前工作正常,并且没有嵌套在<tr> s中,只有{{1 }}Š

有人可以帮助我吗?

修改:我设法通过删除该细分中的<div>并在switch的开头使用它来设置foreach,然后使用它来设置它。这似乎是一个更好的解决方案,但我仍然想了解为什么它是第一次尝试不起作用。

1 个答案:

答案 0 :(得分:1)

您的道明未正确关闭。从案例陈述中删除</text>,然后在</td>

之后移动它
<tr class="summarygridbackground">
  @switch(css)
    {
      case "inv":
        <text>
          <td class ="@css" style="color: @colors.Inv.html">
        </text>
        break;
      case "other":
        <text>
          <td class ="@css" style="color: @colors.Other.html">
        break;
      case "lib":
        <text>
          <td class ="@css" style="color: @colors.Lib.html">

        break;
      case "net":
        <text>
          <td class ="@css" style="color: @colors.Net.html">

        break;
      default:
        <text>
          <td class="@css">

        break;
    }

      <div style="float:left; padding-left:12px;"> Total @group.Name</div>
        <div style="float:right; padding-right:10px;">@FormatAs.Currency(group.TotalValue)</div>
    </td>
        </text>
</tr>