如何在自定义 HTML 帮助器中使用内置 HTML 帮助器?

How to use built-in HTML helpers within a custom HTML helper?

我正在尝试在辅助剃刀函数中使用 BeginForm,例如

@helper Modal(string name)
{
<div id="@name">

    @using (Html.BeginForm("Add", "User", FormMethod.Post)) {
        <fieldset>
            @Html.Label("Name")
            @Html.TextBox("Name", new { @class = "text ui-widget-content ui-corner-all" })
            @Html.Label("Email")
            @Html.TextBox("Email", new { @class = "text ui-widget-content ui-corner-all" })

            <input type="submit" tabindex="-1" style="position:absolute; top:-1000px">
        </fieldset>
    }
</div>
}

但是我得到一个错误:

@MyHelper.Modal("dialog-form")

这是由于 Html... 标记,如果没有它,它显然只适用于 html.

我缺少什么让它工作?

我已经添加了@using System.Web.Mvc.Html;,但它仍然无法识别FormMethod。

不幸的是,在 App_Code 文件夹中定义的声明性助手似乎继承自 System.Web.WebPages.HelperPage 而不是 System.Web.Mvc.WebViewPage,普通 cshtml 文件继承自

helper page好像也有Html 属性但是是空的

但是,您似乎可以通过 PageContext.Page 访问所有这些助手。此外,您还需要添加一些 using 语句(位于 views 文件夹中的 web.config 中的所有命名空间),以便您可以访问重要的扩展方法,如 Html.BeginForm

这是一个示例演示代码:

@using System.Web.Mvc
@using System.Web.Mvc.Routing
@using System.Web.Mvc.Html
@using System.Web.Mvc.Ajax
@using System.Web.Mvc.Razor
@using System.Web.Optimization

@helper MyCustomHelper()
{
    var wvp = PageContext.Page as System.Web.Mvc.WebViewPage;

    var Html = wvp.Html;
    var Ajax = wvp.Ajax;
    var Url = wvp.Url;
    var ViewBag = wvp.ViewBag;

    // ... Helper code goes here ...

    @using (Html.BeginForm("Add", "User", FormMethod.Post))

    @Ajax.BeginForm ...

    @Url.Action ...

    // ...
}

希望这对您有所帮助。