如何正确地逃避剃刀中的牙箍

Tho*_*s H 5 razor

尝试通过部分将模型对象渲染为JSON结构,如下所示:

@if( Model.IsEmpty ) {
    @( Model.UseNull ? "null" : "" )
} else {
    @{ int i = 0; }
    @foreach( var program in Model.Programs ) {
    <text>      
    @(++i > 1 ? "," : "" )
    {
        "Id": "@program.ProgramId",
        "Title": "@Html.Js( program.Title )",
        "Url": "@Html.Js( program.Url )",
    }
    </text>
    }
}
Run Code Online (Sandbox Code Playgroud)

页面编译器在foreach行上抱怨,认为@符号是多余的.删除它会导致之前的行上的编译错误.如果我将if/else的整个部分括在<text>块中,它就可以了.

除了使用显式文本部分之外,有没有办法提示编译器或转义大括号以避免这些错误?

SLa*_*aks 7

在代码块中,您不能使用@字符来创建更多代码块.

将您的代码更改为

@if( Model.IsEmpty ) {
    if (Model.UseNull) {
        @:null
    }
} else {
    int i = 0;
    foreach( var program in Model.Programs ) {
        if (++i > 1) {
            @:,
        }
        <text>      
            {
                "Id": "@program.ProgramId",
                "Title": "@Html.Js( program.Title )",
                "Url": "@Html.Js( program.Url )",
            }
        </text>
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,您应该使用JSON序列化程序.