2011-03-27 65 views
1

下面的代碼片段給我一個錯誤:剃刀:<text></text>內拉姆達

@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

我不認爲你需要的文本之前的@ - @''應該是''? – Stuart 2011-03-27 10:29:22

+0

nope,給我一個CS1525:無效的表達術語'<' – 2011-03-27 10:48:45

回答

3

你可以嘗試將你的代碼片段變成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

謝謝Sergi,就是這樣。 – 2011-03-27 11:49:58

+0

@Dänu - 不客氣。樂意幫忙=) – 2011-03-27 11:52:25

0

爲什麼不乾脆:

@foreach (var root in menuData) 
{ 
    foreach (var child in root.Children) 
    { 
     <li> 
      <a href="@child.Url">@child.Title</a> 
     </li> 
    } 
} 
+1

OP對使用lambda感興趣。我相信這個例子只是簡化了。 – 2013-01-23 23:19:58