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.netmvc4を使用しています

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 に答える