使用VB.NET在ASP.NET MVC视图中使用Lambda Expression

时间:2009-10-28 16:51:23

标签: asp.net-mvc vb.net lambda

使用ASP.NET MVC 1.0,.NET 3.5和C#,您可以轻松地向方法传递一个lambda表达式,该表达式将在方法中执行时执行“Response.Write”某些内容:

<% Html.SomeExtensionMethod(
    () => { <%
        <p>Some page content<p>
    %> }
) %>

方法签名与此类似:

public void SomeExtensionMethod(this HtmlHelper helper, Action pageContent)
{
    pageContent();
}

有没有人知道如何使用上面显示的相同方法签名在VB.NET中使用Lambda表达式来执行类似的调用?

我在VB.NET中尝试了以下内容,但它无法正常工作:

<% Html.SomeExtensionMethod(New Action( _
    Function() %> <p>Some Content</p> <% _
    )) %>

我得到一个例外,说“表达预期。”

任何人都可以帮我解决我做错的事吗?你是如何在VB.NET中做到这一点的?

1 个答案:

答案 0 :(得分:3)

VB.NET 9.0不支持多语句lambda表达式或匿名方法。它也是does not support lambda表达式,它不返回值,这意味着您不能声明类型为Action的匿名函数。

否则这有效,但没有意义,因为lambda什么都不做:

<% Html.SomeExtensionMethod(New Action(Function() "<p>Some Content</p>"))%>

现在让我们举个例子:

<% Html.SomeExtensionMethod(New Action( _
    Function() %> <p>Some Content</p> <% _
)) %>

应该翻译成这样的东西:

Html.SomeExtensionMethod(New Action(Function() Html.ViewContext.HttpContext.Response.Write("<p>Some Content</p>")))

,它不能在VB.NET 9.0中编译,因为你的表达式没有返回值。

在VB.NET 10中you will be able to use the Sub keyword

Html.SomeExtensionMethod(New Action(Sub() Html.ViewContext.HttpContext.Response.Write("<p>Some Content</p>")))

将编译正常。