ASP.NET MVC Razor - лямбда-ошибка - PullRequest
0 голосов
/ 10 апреля 2011

У меня есть метод расширения

public static HelperResult List<T> (this IEnumerable<T> items, Func<T, HelperResult> template) {

            return new HelperResult(writer =>{
                foreach (var item in items)
                    template(item).WriteTo(writer);
            });

        }

Когда я пытаюсь использовать этот метод, как этот

  <ol>
     @Model.List(t=> {@<li>@t.Title</li>});
  </ol> 

Я получаю сообщение об ошибке "; ожидается"

Но если я сделаю

<ol>
    @Model.List( @<li>@item.Title</li>)
   </ol>

все в порядке. (что такое переменная "item"? Где она определяется?)

Почему в первом примере выдается ошибка?

Ответы [ 3 ]

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

Единственное решение - объявить вспомогательный инструмент для бритвы следующим образом:

@helper ItemWriter(string item)
{
    <li>@item.Title</li>
}

А затем передайте это вашей функции расширения

@Model.List(ItemWriter)

Я знаю, что этот код можно сделать лучше, но это работает. Основная идея - использовать Razor Helpers

2 голосов
/ 10 апреля 2011

Синтаксис @<tagname>...</tagname> объявляет лямбда-выражение, которое принимает параметр с именем item и возвращает HelperResult.

Вы не можете использовать его как оператор;Ваш первый пример не может работать.

1 голос
/ 29 июня 2011

Это в значительной степени причина, почему я должен был создать Castle.Blade.Он поддерживает @ => p ... как выражение для создания лямбды с именованными аргументами.Он также поддерживает вложение этих объявлений, а бритва - нет.

...