1

我正在开发一个 asp.net mvc 3 应用程序。我使用 Razor 来表达我的观点。星期五我遇到了这个问题,并认为我已经解决了它,但现在我发现这只是一些私人案例,事情出于某种原因工作。

我有一个有四列的表格,但每一行在一个单元格中可能有不同数量的字段,所以我正在研究某种算法,它将用属于它们的所有信息填充我的单元格。这就是我现在拥有的:

@{
    int tempColumn = 1;    
}

<tr>
@foreach (var field in Model)
{   
    if (field != null)
    {   
        <td>    
        @for (int i = 0; i < field.Count; i++)
        {
            if (field[i].ColumnNo == tempColumn)
            {
                @field[i].QuestionText;
                @field[i].FieldValue;
            }
            else if (field[i] != null)
            {
                tempColumn++;
                @:</td>
                @:<td>
                @field[i].QuestionText;
                @field[i].FieldValue;
            }
        }
    }
    @:</td>      
}
</tr>

基本上这个想法是,无论我有多少对@field[i].QuestionText;/@field[i].FieldValue;我总是在行的开头有一个开始<td>标签,在行</td>的末尾有一个结束标签。我的算法也有问题,但在解决无法识别的闭合手镯问题之前,我无法继续。那么错误是什么 - 当我尝试在调试模式下运行此代码时,我收到此错误:

foreach 块缺少结束“}”字符。确保此块中的所有“{”字符都有一个匹配的“}”字符,并且没有一个“}”字符被解释为标记。

但是当我转到代码本身时,我得到了关于if块和for块的相同错误。我认为使用这种语法插入 HTML<td>和标签 -将保持我的 C# 代码的结构,并在我想要它们的地方添加标签,但从我认为似乎某些原因,至少一个或标签被解释,所以一切在它被识别为 HTML 标记而不是 C# 代码之后。那么在 C# 方法中插入 HTML 标记的正确方法是什么,或者如果错误是由其他原因引起的 - 它可能是什么?</td>@:<td></td>

附言

尽管这不是该问题的主题,但有关该算法的任何帮助将不胜感激。

4

1 回答 1

4

改变

            }
        }
    }
    @:</td>      
}
</tr>

            }
        }
        </td>      
    }
}
</tr>

你从<td>里面开始, if (field != null)所以你也应该在里面结束,否则如果field == null你会得到<tr></td></tr>.

于 2013-05-13T07:29:44.910 回答