for 循环内部 if 块在 HTML 中

本文关键字:HTML 块在 if 循环 内部 for | 更新日期: 2023-09-27 18:31:29

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

@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 中是不允许的吗?

for 循环内部 if 块在 HTML 中

约翰,这看起来像 ASP.NET MVC,我假设是这样。

发生的情况是,您有两个上下文,HTML 和 Razor,任何时候您有@它都会切换到 Razor 上下文,当您有 HTML 标记时,<text>@:它会切换 HTML 上下文。

Visual Studio 抱怨是因为您处于 razor 上下文中(来自 if 语句),并且尝试使用 @for 再次进入 razor 上下文,您只需要在 for 循环之前删除 @。另外请注意,将正确处理 for 循环中的三个帮助程序调用,因为它知道您在那里返回 IHtmlStrings。

您已经在 razor 的代码块内,因此您不需要 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)
    }
}

看到这个问题

"@"字符后出现意外的"foreach"关键字