简单的If/Else Razor语法

Sha*_*anc 38 c# asp.net-mvc html-table razor

我试图用这段代码在foreach中做一个简单的If/Else:

@{
var count = 0;
foreach (var item in Model)
{
    if (count++ % 2 == 0)
    {
        @:<tr class="alt-row">
    } else { 
        @:<tr>
    }
        <td>
            @Html.DisplayFor(modelItem => item.Title)
        </td>
        <td>
            @Html.Truncate(item.Details, 75)
        </td>
        <td>
            <img src="@Url.Content("~/Content/Images/Projects/")@item.Images.Where(i => i.IsMain == true).Select(i => i.Name).Single()" 
                alt="@item.Images.Where(i => i.IsMain == true).Select(i => i.AltText).Single()" class="thumb" />
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.ProjectId }) |
            @Html.ActionLink("Details", "Details", new { id = item.ProjectId }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.ProjectId })
        </td>
    </tr>
}
}
Run Code Online (Sandbox Code Playgroud)

我得到一个解析错误"遇到结束标记"tr"没有匹配的开始标记.你的开始/结束标记是否正确平衡?".好像if语句不想"工作".

Hen*_*man 45

只需将其用于结束标记:

  @:</tr>
Run Code Online (Sandbox Code Playgroud)

并保留你的if/else原样.

好像if语句不想"工作".

它工作正常.你在这里的两个语言空间工作,似乎只有在边界上分开开/关三明治才恰当.


Jef*_*eff 12

我会跟着去

<tr @(if (count++ % 2 == 0){<text>class="alt-row"</text>})>
Run Code Online (Sandbox Code Playgroud)

甚至更好

<tr class="alt-row@(count++ % 2)">
Run Code Online (Sandbox Code Playgroud)

这会给你一些像

<tr class="alt-row0">
<tr class="alt-row1">
<tr class="alt-row0">
<tr class="alt-row1">
Run Code Online (Sandbox Code Playgroud)

  • 抱歉,我发现了原因:https://weblogs.asp.net/scottgu/asp-net-mvc-3-razor-s-and-lt-text-gt-syntax (2认同)

Mic*_*iel 6

有点偏离主题可能,但对于现代浏览器(IE9和更新版本),您可以使用css奇数/偶数选择器来实现您想要的.

tr:nth-child(even) { /* your alt-row stuff */}
tr:nth-child(odd) { /* the other rows */ }
Run Code Online (Sandbox Code Playgroud)

要么

tr { /* all table rows */ }
tr:nth-child(even) { /* your alt-row stuff */}
Run Code Online (Sandbox Code Playgroud)