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

时间:2015-09-30 17:16:34

标签: asp.net-mvc razor html-helper html.beginform

我正在尝试在辅助剃刀功能中使用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。

1 个答案:

答案 0 :(得分:2)

不幸的是,在App_Code文件夹中定义的声明性帮助程序似乎继承自System.Web.WebPages.HelperPage而不是System.Web.Mvc.WebViewPage,而正常的cshtml文件从该文件继承。

似乎辅助页面也有一个Html属性,但它是null。

但是,您似乎可以通过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 ...

    // ...
}

希望这有帮助。