【问题标题】:Mvc 3 Razor, text block in viewpage?Mvc 3 Razor,视图页面中的文本块?
【发布时间】:2011-12-06 17:18:17
【问题描述】:

<text> 标签有问题。由于底部附近有</tr> 标签,以下代码将无法运行。如果我删除它,它可以工作,但它会打印一个不正确的表格。如果我离开它,我会收到以下错误:遇到没有匹配的开始标签的结束标签“tr”。您的开始/结束标签是否正确平衡?

我怎样才能告诉剃须刀忽略这些事情? (我还尝试在 /tr 和所有 html 代码周围添加一个文本标签,但这会产生:Encountered end tag "text" with no matching start tag。你的开始/结束标签是否正确平衡?

@{                             
int i = 0;
foreach (var item in Model.Model)
{
    if (i % 2 == 0)
    {
        <text><tr class="alternate-row"></text>
    }
    else
    {
        <text><tr></text>
    }

        <td>
            <input type="checkbox" />
        </td>
        <td>
            @item.Firstname
        </td>
        <td>
            @item.Surname
        </td>
        <td>
            <a href="">george@mainevent.co.za</a>
        </td>
        <td class="options-width">
            <a href="" title="Edit" class="icon-1 info-tooltip"></a><a href="" title="Edit" class="icon-2 info-tooltip">
            </a><a href="" title="Edit" class="icon-3 info-tooltip"></a><a href="" title="Edit"
                class="icon-4 info-tooltip"></a><a href="" title="Edit" class="icon-5 info-tooltip">
                </a>
        </td>        
    </tr>

}      
}    

更新另一个问题

为什么 Razor 还要测试 html-tags?

【问题讨论】:

  • Razor 测试 HTML 标签,因为解析器需要检测页面上的哪些元素是 Razor,哪些是纯 HTML。对待它与标准 Web 表单视图引擎与 MVC 的工作方式截然不同。

标签: c# asp.net-mvc-3 razor


【解决方案1】:

你可以这样做

<tr@if (i % 2 == 0) { <text> class="alternate-row"</text> }>

或者你可以设置一个变量来为&lt;tr&gt;标签“保存”你的扩展html,就像这样

int i = 0;
foreach (var item in Model.Model)
{
    string ext = "";
    if (i % 2 == 0)
    {
        ext = " class=\"alternate-row\"";
    }

    <tr@ext>
    // ...

这是最简单的解决方案,或者您可以创建自定义 html 帮助器。

更多信息:Creating Custom HTML Helpers

更新

Darin 也说过,他将创建一个自定义 html 助手。

如果您不止一次需要,我也建议这样做。

结论

第一选择是创建一个html helper,第二是使用我的第一个 方法(内联 if 语句),最后使用变量。

这并不取决于您需要“多久”一次,但如果您真的需要 那只有一次,选择第一种方法。 三个解决方案中的每一个都是正确的,取决于您的时间 你有。

希望对您有所帮助

【讨论】:

  • 所以你的意思是没有其他方法可以解决这个问题?
  • class="alternate-row" }> 工作正常,但对于一个人来说仍然感觉有点太多了
【解决方案2】:
<tr@Html.Raw(i % 2 == 0 ? " class=\"alternate-row\"" : "")>
    ... some tds
</tr>

但我个人会编写一个自定义 Html 帮助程序来避免这种意大利面条式代码,并具有以下内容:

@using (Html.Tr(i))
{
    <td>
        <input type="checkbox" />
    </td>
    <td>
        @item.Firstname
    </td>    
    ...
}

我还将重构并摆脱 foreach 循环,并用一个简单的显示模板调用替换它:@Html.DisplayForModel()

【讨论】:

    【解决方案3】:

    我为您提供了另一种使用 javascript 的方法。由于您使用的是 MVC3,因此您可能可以访问 jQuery。添加这个小块 javascript (See jsFiddle Example)

    $(function() {
        $('tr:odd').addClass('alternate-row');
    })
    

    【讨论】:

      【解决方案4】:

      从条件中的 tr 标记周围删除 &lt;text&gt;

      【讨论】:

      • 不适用于 ,已经试过了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-26
      • 1970-01-01
      • 2020-02-18
      • 1970-01-01
      • 2018-02-24
      • 2021-05-16
      相关资源
      最近更新 更多