2012-10-10 56 views
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

的解決方案是在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 

然後你需要打電話給你HEL每種方法是這樣的:

@MyHelpers.CreatePostForm(Html, "SomeAtion", "SomeContoller" , "SomeId") 
+0

我仍然無法訪問html參數上的這些方法。其次,我可以在該cshtml中使用Html。問題在於這些擴展方法(BeginForm,AntiForgeryToken)。 – gigi

+0

這些都是擴展方法,您是否在助手文件的頂部添加了所需的使用方法? '@using System.Web.Mvc.Html @using System.Web.Mvc' – nemesv

+0

我現在已經做了,它工作。謝謝。 – gigi