Бритва: <text></text> внутри лямбда - PullRequest
1 голос
/ 27 марта 2011

Следующий фрагмент кода дает мне ошибку:

@foreach (PageViewModel root in menuData)
    {
        Action < PageViewModel > traverse = null;
        traverse = (n) => {
            @<text>
                <li><a href="@n.Url">@n.Title</a></li>
            </text>
            n.Children.ForEach(traverse);
        };
        traverse(root);
    }

Ошибка: CS1002: ; expected, прямо в строке после закрывающего тега </text>.

Что я делаюздесь не так?

Ответы [ 2 ]

3 голосов
/ 27 марта 2011

Вы можете попробовать превратить ваш фрагмент кода в Templated Razor Delegate .

На примере Фила Хаака вы можете создать помощника, который будет выглядеть примерно так:

public static class RazorExtensions 
{
    public static HelperResult Traverse(this Action<PageViewMoidel> traverse, 
        Func<T, HelperResult> template) 
    {
        return new HelperResult(writer => 
        {
            traverse = (n) => template(n).WriteTo(writer);
        });
    }
}

Отказ от ответственности: Я не проверял это и удобно пропустил вызов n.Children.Foreach для упрощения.

0 голосов
/ 27 марта 2011

Почему бы просто:

@foreach (var root in menuData)
{
    foreach (var child in root.Children)
    {
        <li>
            <a href="@child.Url">@child.Title</a>
        </li>
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...