Использование с универсальными методами в представлении бритвы - PullRequest
5 голосов
/ 06 июля 2011

Есть ли способ заставить оператор using работать с универсальными методами в видах бритвы? Например, я хотел бы получить фрагмент веб-формы

<% using(Html.BeginForm<Controller>(c => c.Method()))
   { %>
       Some code
<% } %>

преобразован в бритву, как это

@using(Html.BeginForm<Controller>(c => c.Method()))
{
    Some code
}

но это не работает, поскольку бритва интерпретирует <Controller> как тег HTML. Добавление скобок также не работает, так как бритва не включает фигурные скобки, которые начинаются и заканчиваются BeginForm. Ниже приведены различные подходы, которые я пробовал, и я больше не могу думать о них.

@using(Html.BeginForm<Controller>(c => c.Method())) // Interpreted as c# to '<Controller>'
{                                                   // interpreted as HTML
    Some code                                       // interpreted as HTML
}                                                   // interpreted as HTML

@(using(Html.BeginForm<Controller>(c => c.Method()))) // Interpreted as c#
{                                                     // interpreted as HTML
    Some code                                         // interpreted as HTML
}                                                     // interpreted as HTML

@{using(Html.BeginForm<Controller>(c => c.Method())) // Interpreted as c#
    {                                                // interpreted as c#
        Some code                                    // interpreted as c#
    }                                                // interpreted as c#
}                                                    // interpreted as c#

@(using(Html.BeginForm<Controller>(c => c.Method()))) // Interpreted as c#
@{                                                    // interpreted as c#
        Some code                                     // interpreted as c#
}                                                     // interpreted as c#    

Айноне знает, как это сделать?

Обновление : кажется, третий способ выше - это способ сделать это. Бритва, очевидно, работает так:

@{using(Html.BeginForm<Controller>(c => c.Method())) // Interpreted as c#
    {                                                // interpreted as c#
        <p>                                          // interpreted as HTML
        Some text                                    // interpreted as HTML
        @Code                                        // interpreted as c#
        </p>                                         // interpreted as HTML
    }                                                // interpreted as c#
}                                                    // interpreted as c#

Не самый очевидный способ ведения дел, но он работает.

Обновление 2 : Бритва, вероятно, была обновлена ​​в какой-то момент, потому что теперь опция # 1 выше работает, как и ожидалось.

@using(Html.BeginForm<Controller>(c => c.Method()))
{
    Some code
} 

1 Ответ

7 голосов
/ 07 июля 2011

Что делать, если вы заключите весь оператор в паренсы:

@(using(Html.BeginForm<Controller>(c => c.Method())))

Или используйте блок кода?

HTH.

...