剃刀语法问题

本文关键字:问题 语法 剃刀 | 更新日期: 2023-09-27 18:32:17

看了例子,所以我不确定我在这里做错了什么。else 条件不起作用,它告诉我 foreach 命令上没有关闭 }

<table class="rssTable">
    @foreach (var item in PAL.Intranet.Models.RSSReader.GetRSSFeed("http://www.medicalnewstoday.com/rss/featurednews.xml"))
    {
        <tr>
            @if (rssCount % 2 != 0)
            {
                <td class="rssTableOdd">
            }
            else
            {
                <td class="rssTableEven">
            }
                <a href="@item.Link" target="_blank">@Html.Encode(item.Title.Replace("Medical News Today: ", ""))</a><br />
                @Html.Raw(item.Description)
            </td>
        </tr>
        rssCount++;
        if (rssCount.Equals(5))
        {
            rssCount = 0;
            break;
        }
    }
</table>

剃刀语法问题

if逻辑简单地重写为内联条件将防止 Razor 引擎与您的特定设置混淆(我的条件仍然混淆了 StackOverflow 的代码引擎,尽管:):

@foreach (var item in PAL.Intranet.Models.RSSReader.GetRSSFeed("http://www.medicalnewstoday.com/rss/featurednews.xml"))
{
    <tr>
        <td class="@(rssCount % 2 != 0 ? "rssTableOdd" : "rssTableEven")">
            <a href="@item.Link" target="_blank">@Html.Encode(item.Title.Replace("Medical News Today: ", ""))</a><br />
            @Html.Raw(item.Description)
        </td>
    </tr>
    rssCount++;
    if (rssCount.Equals(5))
    {
        rssCount = 0;
        break;
    }
}

我认为问题归结为在您的 if/else 列中有一个 <td> 标签的开头。 使用 Resharper,我注意到一旦我删除了每个起始<td>标签末尾的自动编码</td>,我也必须在 else 条件前面放置一个@

此修改应该有效(立即启动测试解决方案)。

        @if (rssCount % 2 != 0)
        {
            <td class="rssTableOdd">
        }
        @else
        {
            <td class="rssTableEven">
        }

使视图解析器更快乐的另一种方法是简单地声明一个变量并将其用作类:

@{var cssClass = "rssTableEven";}
    @foreach (var item in PAL.Intranet.Models.RSSReader.GetRSSFeed("http://www.medicalnewstoday.com/rss/featurednews.xml"))
    {
        <tr>
            @if (rssCount % 2 != 0)
            {
                cssClass = "rssTableOdd";
            }
            else
            {
                cssClass = "rssTableEven";
            }
<td class="@cssClass">stuff</td>
</tr>

或者最后一种(更干净?)的方法是将该逻辑直接放入<td class=>标签中。

<td class="@(rssCount % 2 == 0 ? "rssTableEven" : "rssTableOdd")"></td>

这应该会清理很多视图逻辑。