代码之家  ›  专栏  ›  技术社区  ›  Chris Pietschmann

使用VB.NET在ASP.NET MVC视图中使用lambda表达式

  •  2
  • Chris Pietschmann  · 技术社区  · 16 年前

    使用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> <% _
        )) %>
    

    我得到一个例外,说“expression expected”。

    有人能帮我做错事吗?如何在vb.net中实现这一点?

    1 回复  |  直到 15 年前
        1
  •  3
  •   Darin Dimitrov    16 年前

    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>")))
    

    这将编译得很好。