Razor 如何在剃须刀中正确地脱离牙套

Razor 如何在剃须刀中正确地脱离牙套,razor,Razor,正在尝试通过partial将模型对象呈现为JSON结构,如下所示: @if( Model.IsEmpty ) { @( Model.UseNull ? "null" : "" ) } else { @{ int i = 0; } @foreach( var program in Model.Programs ) { <text> @(++i > 1 ? "," : "" ) { "Id": "@prog

正在尝试通过partial将模型对象呈现为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>
    }
}
@if(Model.IsEmpty){
@(Model.UseNull?“null”:“”)
}否则{
@{int i=0;}
@foreach(Model.Programs中的var程序){
@(++i>1?”,“:”)
{
“Id”:“@program.ProgramId”,
“Title”:“@Html.Js(program.Title)”,
“Url”:“@Html.Js(program.Url)”,
}
}
}
页面编译器在foreach行抱怨,认为@符号是多余的。删除它会导致前一行出现编译错误。如果我将If/else的所有部分都包含在
块中,它就可以工作了


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

使用
JavaScriptSerializer
将模型对象转换为JSON可能比这种方法更好

在我的项目中,我甚至让它成为HtmlHelper,如下所示:

private static readonly JavaScriptSerializer JsonSerializer = new JavaScriptSerializer();
public static HtmlString ToJson<T> (this HtmlHelper htmlHelper, T obj)
{
    return new HtmlString(JsonSerializer.Serialize(obj));
}
private static readonly JavaScriptSerializer JsonSerializer=new JavaScriptSerializer();
公共静态HtmlString ToJson(此HtmlHelper HtmlHelper,T obj)
{
返回新的HtmlString(JsonSerializer.Serialize(obj));
}
然后,您可以在视图中使用它,如:

<script type="text/javascript">
    var model = @Html.ToJson(Model);
</script>

var model=@Html.ToJson(model);

在代码块内,不能使用
@
字符创建更多代码块

将代码更改为

@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>
    }
}
@if(Model.IsEmpty){
if(Model.UseNull){
@:null
}
}否则{
int i=0;
foreach(Model.Programs中的var程序){
如果(++i>1){
@:,
}
{
“Id”:“@program.ProgramId”,
“Title”:“@Html.Js(program.Title)”,
“Url”:“@Html.Js(program.Url)”,
}
}
}
但是,您应该改用JSON序列化程序