Использование лямбда-выражения в ASP.NET MVC View с использованием VB.NET - PullRequest
2 голосов
/ 28 октября 2009

С ASP.NET MVC 1.0, .NET 3.5 и C # вы можете легко передать методу лямбда-выражение, которое будет выполнять «Response.Write» некоторый контент, когда он выполняется внутри метода:

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

Подпись метода похожа на эту:

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

Кто-нибудь знает, как выполнить аналогичный вызов с использованием лямбда-выражений в VB.NET, используя ту же сигнатуру метода, как показано выше?

Я попробовал следующее в VB.NET, но оно не будет работать:

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

Я получаю исключение, говорящее "Выражение ожидается".

Может кто-нибудь помочь мне с тем, что я делаю не так? Как вы делаете это в VB.NET?

1 Ответ

3 голосов
/ 28 октября 2009

VB.NET 9.0 не поддерживает лямбда-выражения с несколькими операторами или анонимные методы. Также не поддерживает лямбда-выражение, которое не возвращает значение, означающее, что вы не можете объявить анонимную функцию типа Action .

В противном случае это работает, но бессмысленно, потому что лямбда ничего не делает:

<% 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 вы сможете использовать ключевое слово Sub :

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

, который хорошо скомпилируется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...