2012-02-22 64 views
1

我有一些這樣的剃鬚刀代碼。如何在mvc 3剃鬚刀中使用lambda


@{ 
    Layout = null; 
    var Nav = ViewData["Nav"] as List<string>; 
} 
@{ 
    if(Nav!=null){ 
     Nav.ForEach(item => 
     { 
      @<a>[email protected](item)</a> 
     }); 
    } 
} 

,但我得到這些線路上。錯誤是:

'/'應用程序中的服務器錯誤。編輯錯誤 說明:編譯服務此請求所需的資源時出錯請查看以下具體的錯誤細節並適當修改您的源代碼。

Compiler Error Message: CS1002: ; expected 

Source Error: 

Line 8:   { 

Line 9:    @<a>[email protected](item)</a> 

Line 10:   }); 

Line 11:  } 

Line 12: } 

如果我用foreach塊替換的ForEach方法,它的工作原理好。

foreach (var item in Nav) 
{ 
    <a>@item</a> 
} 

但我不喜歡的foreach,它看起來那麼難看。
如何使用ForEach方法instand的foreach塊?

回答

0

我想,那是因爲你已經把兩個@符號在同一行嘗試以下

if(Nav!=null){ 
    Nav.ForEach(item => 
    { 
     <a>123 
     @(item) 
     </a> 
    }); 
} 

合這有助於。

+0

對不起,它不起作用。如果刪除第一個@符號,剃鬚刀將以「 123」作爲C#代碼。 – peter 2012-02-22 10:51:34

1

下面是使用模板拉姆達在剃刀的好文章:http://haacked.com/archive/2011/02/27/templated-razor-delegates.aspx

有幾個問題。首先,您需要指出您正在爲您的lamda編寫HTML,因此您必須明確呼叫HelperResult上的WriteWriteTo。此外,由於您的lambda中的{ }表示塊,因此您需要用分號結束所有行。

嘗試使用類似Haacked的List擴展:

public static class RazorExtensions { 
    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); 
      } 
     }); 
    } 
}