3

我想创建一些全局辅助函数。我知道我必须将它们放在 App_Code 中的 .cshtml 文件中。我创建了这个文件:

@helper CreatePostForm(string action, string controller, string id, params string[] hiddens)
{       
    using (BeginForm(action, controller, System.Web.Mvc.FormMethod.Post, new { id = id }))
    {
        @Html.AntiForgeryToken()
        foreach(string hidden in hiddens)
        {
            @Html.Hidden(hidden)   
        }
    }
}

问题是BeginFormAntiForgeryToken方法也不被认可。如何使它正确?

PS:我正在使用.net 4.5,asp.net mvc 4

4

2 回答 2

3

解决方案是将HtmlHelper对象作为参数传递给您的助手:

@helper CreatePostForm(HtmlHelper html, 
                       string action, string controller, string id, 
                       params string[] hiddens)
{       
    using (html.BeginForm(action, controller, FormMethod.Post, new { id = id }))
    {
        @html.AntiForgeryToken()
        foreach(string hidden in hiddens)
        {
            @html.Hidden(hidden)   
        }
    }
}

您还应该将所需的@using语句添加到您的帮助文件中,以使扩展方法BeginForm能够正常工作:

@using System.Web.Mvc.Html
@using System.Web.Mvc

然后你需要像这样调用你的辅助方法:

@MyHelpers.CreatePostForm(Html, "SomeAtion", "SomeContoller" , "SomeId")
于 2012-10-10T19:20:50.377 回答
1

您不必将HtmlHelper对象作为参数传递。只需将其放在 App_Code 中的 .cshtml 文件中即可:

@functions {
    private new static HtmlHelper<dynamic> Html => ((WebViewPage)WebPageContext.Current.Page).Html;
}

其他有用的成员是:

private static UrlHelper Url => ((WebViewPage)WebPageContext.Current.Page).Url;
private static ViewContext ViewContext => ((WebViewPage)WebPageContext.Current.Page).ViewContext;
于 2019-06-07T13:58:02.017 回答