2

Html.BeginForm() メソッドのバリアントを使用して、次のように html 属性をフォームに添付しています。

@using (Html.BeginForm("actionname", "controllername", FormMethod.Post, new { id = "myform" }))

残念ながら、これによりフォーム ターゲットがすべてのルート データを失います。

controller/action?abc=123Html.BeginForm()URLがcontroller/action?abc=123_ controller/action、しかしそれは私の目的を解決しません)。

Html.BeginForm()古いルート値を保持し、同時にフォームに html 属性を追加できるバリアントはありますか?

4

1 に答える 1

1

私が見る限りBeginForm、現在の完全な URL を使用するのは、パラメーターのないバージョンのみです。

public static MvcForm BeginForm(this HtmlHelper htmlHelper) {
    // generates <form action="{current url}" method="post">...</form>
    string formAction = htmlHelper.ViewContext.HttpContext.Request.RawUrl;
    return FormHelper(htmlHelper, formAction, FormMethod.Post, new RouteValueDictionary());
}

これが最善の方法かどうかはわかりませんが、カスタム フォーム ヘルパーを記述してQueryString値を含めることができます。

public static class MyFormExtensions
{
    public static MvcForm MyBeginForm(this HtmlHelper htmlHelper, object htmlAttributes)
    {
        var rvd = new RouteValueDictionary(htmlHelper.ViewContext.RouteData.Values);
        var queryString = htmlHelper.ViewContext.HttpContext.Request.QueryString;
        foreach (string key in queryString.AllKeys) rvd.Add(key, queryString[key]);
        return htmlHelper.BeginForm(null, null, rvd, FormMethod.Post, HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes));
    }
}

@using (Html.MyBeginForm(new { id = "myform" }))
{
    //...
}
于 2012-03-27T11:31:52.883 に答える