我正在尝试在辅助剃刀功能中使用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。
答案 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 ...
// ...
}
希望这有帮助。