【问题标题】:The closing braces of my C# code are not recognized in a Razor partial view在 Razor 局部视图中无法识别我的 C# 代码的右大括号
【发布时间】:2013-05-13 06:50:40
【问题描述】:

我正在开发一个 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;,我都会在行的开头有一个开始的&lt;td&gt;标签,在行的末尾有一个结束的&lt;/td&gt;标签排。我的算法也有问题,但在解决无法识别的闭合手镯问题之前,我无法继续。那么错误是什么 - 当我尝试在调试模式下运行此代码时,我收到此错误:

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

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

附言

任何关于算法的帮助都将不胜感激,尽管这不是这个问题的主题。

【问题讨论】:

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


    【解决方案1】:

    改变

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

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

    你在if (field != null) 中开始你的&lt;td&gt;,所以你也应该在里面结束,否则如果field == null 你会得到&lt;tr&gt;&lt;/td&gt;&lt;/tr&gt;

    【讨论】:

    • 谢谢。我发现它很困难,但这确实是问题所在。
    • @majorByte - 你能说出@: 的意思吗?
    • @ewvfwrwwvw: @: 用于混合代码和非代码/文本。例如,@if (true) { output this text } 会抛出错误,因为 razor 将其识别为代码而不是文本,因此无法找到类型或命名空间的输出。 @if (true) { @:output this text } 告诉 razor 它正在处理文本而不是代码。但是对于 html 标签,这不是必需的,因为 razor 会将其识别为文本,即:@if (true) {&lt;text&gt;output this text&lt;/text&gt; }
    • @ewvfwrwwvw @:&lt;/td&gt; 中的 @: 在这种情况下是多余的,但这不是问题所在,问题在于 不在正确的“代码块”中.
    • 对不起,我不能理解你的意思。你能分享任何链接来理解它吗?
    猜你喜欢
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多