1

Html.BeginForm() で GET-Request を実行するときに、GET パラメータを保持することは可能ですか? ハードコーディングされたビューとコントローラーを入力する必要はありません。

やってみると

    @using (Html.BeginForm())

私のGETパラメータ(ソート、ページ、ソートディレクトリなど)を保持しています。しかし、それは私のパラメータをPOSTしています.+

やってみると

    @using (Html.BeginForm(null, null, FormMethod.GET))

パラメータがリセットされ、フォームを使用して送信した新しい GET パラメータしかありません。

この問題の解決策は何ですか? :)

4

1 に答える 1

1

この問題の解決策は何ですか? :)

必要に応じて動作するカスタム Html.BeginForm ヘルパーを作成するには:

using System;
using System.Web.Mvc;
using System.Web.Mvc.Html;
using System.Web.Routing;

public static class FormExtensions
{
    public static IDisposable MyBeginForm(this HtmlHelper html, string action, string controller, FormMethod method)
    {
        var routeValues = new RouteValueDictionary();
        var query = html.ViewContext.HttpContext.Request.QueryString;
        foreach (string key in query)
        {
            routeValues[key] = query[key];
        }
        return html.BeginForm(action, controller, routeValues, FormMethod.Get);
    }
}

次に、ビューでデフォルトのヘルパーの代わりにこのカスタム ヘルパーを使用します。

@using (Html.MyBeginForm(null, null, FormMethod.Get))
{ 
    ...
}

また、カスタム ヘルパーを作成したくない (推奨されません) 場合は、現在のクエリ文字列パラメーターをキャプチャする次のホラーを作成することで、ビューを傷つけることもできます。

@using (Html.BeginForm(null, null, new RouteValueDictionary(Request.QueryString.Keys.Cast<string>().ToDictionary(key => key, key => (object)Request.QueryString[key])), FormMethod.Get))
{ 
    ...    
}
于 2013-06-13T07:11:44.957 に答える