Как правильно избежать брекетов в Razor - PullRequest
5 голосов
/ 08 апреля 2011

Попытка визуализировать объект модели в структуру 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>
    }
}

Компилятор страницы жалуется на строку foreach, считая символ @ избыточным.Удаление приводит к ошибке компиляции в строке ранее.Если я заключу целые разделы if / else в блоки <text>, это сработает.

Помимо использования явных текстовых разделов, есть ли способ подсказки компилятору или экранирование скобок, чтобы избежать этих ошибок?

Ответы [ 2 ]

7 голосов
/ 08 апреля 2011

Внутри блока кода вы не можете использовать @ символов для создания большего количества блоков кода.

Измените свой код на

@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>
    }
}

Однако вместо этого следует использовать сериализатор JSON.

3 голосов
/ 08 апреля 2011

Использование 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));
}

Затем вы можете использовать его в своем представлении, например:

<script type="text/javascript">
    var model = @Html.ToJson(Model);
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...