如果是HTML中的块,则为for循环

时间:2014-11-21 14:59:26

标签: c# html asp.net-mvc razor

我很难理解为什么这不起作用:

@if ((Model.doaFormGroupDocuments.Count != 0) || (Model.doaFormGroupDocuments != null))
{
    @for(var i = 0; i < Model.doaFormGroupDocuments.Count; i++)
    {
        @Html.HiddenFor(model => model.doaFormGroupDocuments[i].Checked)
        @Html.HiddenFor(model => model.doaFormGroupDocuments[i].Id)
        @Html.HiddenFor(model => model.doaFormGroupDocuments[i].Name)
    }
}

我在for循环旁边的@下面得到一条红色错误行。 HTML中不允许这样做吗?

2 个答案:

答案 0 :(得分:3)

John,这看起来像ASP.NET MVC,我会假设情况就是这样。

当您有HTML标记@<text>时,如果您有@:切换到Razor上下文,则会有两种情况,HTML和Razor会发生什么?它会切换HTML上下文。

Visual Studio之所以抱怨是因为你处于剃刀上下文中(来自你的if语句),并试图再次使用@for进入剃须刀上下文,你只需要在for循环之前删除@。另外作为注释,for循环中的三个辅助调用将被正确处理,因为它知道你在那里返回IHtmlStrings。

答案 1 :(得分:1)

您已经在剃须刀的代码区内,因此您不需要@关键字之前的for

@if ((Model.doaFormGroupDocuments.Count != 0) || (Model.doaFormGroupDocuments != null))
{
    for(var i = 0; i < Model.doaFormGroupDocuments.Count; i++)
    {
        @Html.HiddenFor(model => model.doaFormGroupDocuments[i].Checked)
        @Html.HiddenFor(model => model.doaFormGroupDocuments[i].Id)
        @Html.HiddenFor(model => model.doaFormGroupDocuments[i].Name)
    }
}

看到这个问题

Unexpected "foreach" keyword after "@" character