创建类似于 BeginForm 的 html 帮助程序,您可以在其中访问块服务器端的内容

发布于 2024-11-17 17:22:08 字数 236 浏览 1 评论 0原文

我正在致力于将自动 CoffeeScript 编译集成到 ASP.NET MVC 项目中。我已经有了一个工作,如果您在脚本标记中指定 .coffee 文件,它会将其编译为服务器上的 javascript。

我希望能够对嵌入视图中的 CoffeeScript 执行相同的操作。是否可以编写某种类型的 HtmlHelper,让我能够捕获用户在 using 块中提供的内容,类似于 Html.BeginForm 使用 IDispose 的工作方式?

I am working on integrating automatic CoffeeScript compilation inside ASP.NET MVC projects. I already have the piece working where if you specify a .coffee file in a script tag, it compiles it to javascript on the server.

I want to be able to do the same for CoffeeScript embedded in a view. Is it possible to write an HtmlHelper of some variety that would allow me to capture the content the user supplies within the using block similar to how Html.BeginForm works using IDispose?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

倒数 2024-11-24 17:22:08

Html.BeginForm() 实际上并不捕获 using 块的内容。它只是用表单标记包围它,通过将开始标记和结束标记写入来自 IDisposableDispose 方法上的响应。

请在此处查看 Html.BeginForm() 的实现< /a> 和 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;

Html.BeginForm() doesn't actually capture the contents of the using block. It just surrounds it with the form tag, by writing the opening tag and then the closing tag to the response on the Dispose method, from IDisposable.

Please see Html.BeginForm()'s implementation here, and the Dispose method here.

If you actually want to capture the contents of the block, you might want to write a helper method that takes a Razor Template as a parameter.

By implementing the following method:

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);
    }
}

You can use it in you Razor view like this:

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

UPDATE:
Just to clarify, given your extension method belongs to the MyApplication.Extensions namespace, you should add the following to the top of your view:

@using MyApplication.Extensions;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文