创建类似于 BeginForm 的 html 帮助程序,您可以在其中访问块服务器端的内容
Posted
技术标签:
【中文标题】创建类似于 BeginForm 的 html 帮助程序,您可以在其中访问块服务器端的内容【英文标题】:Create html helper similar to BeginForm where you can gain access to the content of the block server-side 【发布时间】:2011-09-25 16:14:05 【问题描述】:我正致力于在 ASP.NET MVC 项目中集成自动 CoffeeScript 编译。如果您在脚本标签中指定一个 .coffee 文件,我已经有这部分工作,它会将其编译为服务器上的 javascript。
我希望能够对嵌入在视图中的 CoffeeScript 执行相同的操作。是否可以编写各种 htmlHelper,让我可以在 using 块中捕获用户提供的内容,类似于 Html.BeginForm 使用 IDispose 的工作方式?
【问题讨论】:
【参考方案1】:Html.BeginForm() 实际上并不捕获using
块的内容。它只是用表单标签包围它,通过将开始标签和结束标签写入Dispose
方法上的响应,来自IDisposable
。
请参阅Html.BeginForm()
的实现here,以及Dispose 方法here。
如果您真的想捕获块的内容,您可能需要编写一个以Razor Template 作为参数的辅助方法。
通过实现以下方法:
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;
【讨论】:
以上是关于创建类似于 BeginForm 的 html 帮助程序,您可以在其中访问块服务器端的内容的主要内容,如果未能解决你的问题,请参考以下文章
Html.BeginForm 使用 FormMethod.GET 丢失 routeValues
MVC小系列Html.BeginForm与Ajax.BeginForm