剃刀语法问题

时间:2014-11-26 16:00:31

标签: c# asp.net-mvc razor

看了一些例子,所以我不确定我在这里做错了什么。 其他条件不起作用,它告诉我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>

2 个答案:

答案 0 :(得分:2)

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;
    }
}

答案 1 :(得分:1)

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

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

        @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>

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