Создайте HTML-помощник, похожий на BeginForm, где вы можете получить доступ к содержимому блока на стороне сервера. - PullRequest
0 голосов
/ 30 июня 2011

Я работаю над интеграцией автоматической компиляции CoffeeScript в проектах ASP.NET MVC.У меня уже есть кусок, работающий, где, если вы укажете файл .coffee в теге скрипта, он скомпилирует его в javascript на сервере.

Я хочу сделать то же самое для CoffeeScript, встроенного в представление.Можно ли написать HtmlHelper некоторого разнообразия, который позволил бы мне захватывать контент, который пользователь предоставляет внутри блока using, аналогично тому, как Html.BeginForm работает с использованием IDispose?

1 Ответ

1 голос
/ 01 июля 2011

Html.BeginForm () фактически не захватывает содержимое блока using.Он просто окружает его тегом формы, записывая открывающий тег, а затем закрывающий тег в ответ на метод Dispose от IDisposable.

Пожалуйста, см. Реализацию Html.BeginForm() здесь и метод Dispose здесь .

Если вы действительно хотите захватить содержимое блока, вы можете написать вспомогательный метод, который принимает Шаблон Razor в качестве параметра.

Используя следующий метод:

public static class HtmlHelperExtensions
{
    public static string CoffeeScript(this HtmlHelper htmlHelper, Func<HelperResult> template)
    {
        // Then you can access the contents of the block here
        string contents = template().ToHtmlString();

        return DoSomething(string);
    }
}

Вы можете использовать его в своем представлении Razor следующим образом:

@Html.CoffeeScript(@<text>
    Anything can go here
</text>;);

ОБНОВЛЕНИЕ: Просто для уточнения, учитывая, что ваш метод расширения относится к пространству имен MyApplication.Extensions, вы должны добавить следующее в верхней части вашего представления:

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