剃刀每12个元素打印一个div

时间:2013-07-26 11:00:35

标签: c# razor

我有一系列商品,想用Razor打印出来。对于每12个元素,它应该创建一个新的div。但是,打开和关闭标签似乎会导致很多问题。这是我的代码。

<div class='grid_7'>
@foreach (var property in properties)
{

    @if (counter % 12 == 0)
    {
    </div>
    <div class='grid_7'>
    }

    @if (property.ShowInEditor)
    {
    <span> one property! @(property.Name) </span>
    }

    counter++
}

但是,它告诉我第一个if和第一个foreach错过了结束{。我认为这是因为未封闭的标签,但正如您所看到的,我无法在那里关闭标签。

我该怎么做?

编辑:在@之前移除if导致更多问题,使Razor相信它是文本而不是代码。

3 个答案:

答案 0 :(得分:2)

尝试在收到此错误的行之前添加“@:”,不加引号,并在if语句之前删除@

<div class='grid_7'>

@foreach (var property in properties)
{

    if (counter % 12 == 0)
    {
    @:</div>
    @:<div class='grid_7'>
    }

    if (property.ShowInEditor)
    {
    @:<span> one property! @property.Name </span>
    }

    counter++;
}

答案 1 :(得分:1)

您需要稍微修改一下条件,以便在开始时计数器为零,否则您将在第一次交互时得到一个空div:

<div class='grid_7'>

@{
    var counter = 0;

    foreach (var property in properties)
    {

        if (counter > 0 && counter % 12 == 0)
        {
            @Html.Raw("</div><div class='grid_7'>")
        }

        if (property.ShowInEditor)
        {
            <span> one property! @(property.Name) </span>
        }

        counter++;
    }

</div>

答案 2 :(得分:0)

<div class='grid_7'>
    @foreach (var property in properties)
    {
        if (count%7==0)
        {
            @Html.Raw("</div>");
            @Html.Raw("<div class='grid_7'>");
        }

        else 
        {
            //do something 
        }