31

私のURLは次のようになります:

customer/login?ReturnUrl=home

ログインビューでは、正常に機能するこのコードパターンを使用しました。

@using(Html.BeginForm())
{
   ...
}

これは魔法のように次のhtmlを生成します

<form action="customer/login?ReturnUrl=home" method="post">

しかし今、私data-id="something"はフォームに属性(例えば)を追加する必要があります。どうやってやるの?クエリ文字列がない場合は、次のようなことができます。

@using(Html.BeginForm(action, controller, FormMethod.Post, 
                      new { data_id="something" }))

しかし、htmlにあるはずのクエリ文字列を追加する方法がわかりません:

<form action="customer/login?ReturnUrl=home" method="post" data-id="something">

直接使用することを考えまし<form>たが、変数であるクエリ文字列を指定する方法がわかりません。そして、私はそれをどのように達成するのか分かりませんHtml.BeginForm。任意のヒントをいただければ幸いです。

解像度:

今のところ、私<form>は次のヒントを使用しました。ビューで現在のURL値を取得する方法。結果のビューは次のようになります

<form action="@Request.Url.PathAndQuery" data-id="something" method="POST">

しかし、このためのオーバーロードされたメソッドがあると便利ですBeginForm

4

7 に答える 7

21

これが私のために働いた方法です

Html.BeginForm("Profile", "Partner", routeValues: new {id=Partner.partner_id},method:FormMethod.Post)

メソッドのオーバーロードに問題があったように見えましたが、何であるかを指定することで、正常に機能しているようです...

于 2012-12-20T01:03:19.653 に答える
17

クエリ文字列から RouteValueDictionary を作成するには:

RouteValueDictionary queryStringDictionary = new RouteValueDictionary(Request.QueryString.AllKeys.ToDictionary(key => key, key => (object)Request.QueryString[key]));

次に、Html.BeginForm で使用できます。

Html.BeginForm(null, null, queryStringDictionary, FormMethod.Post, new Dictionary<string, object> { { "autocomplete", "off" } })
于 2012-08-02T19:04:43.383 に答える
16

これは質問に直接答えるものではないと思いますが、単純な古いフォームタグを使用しないのはなぜですか?

 <form action='customer/login?ReturnUrl=@Request.QueryString["ReturnUrl"]' method="post" data-id="something">

または、パスとクエリ文字列を使用してフォームをレンダリングするカスタム HtmlHelperExtension を作成できます。この HtmlHelperExtension では、クエリ文字列の値を反復処理し、routeValueDictionary にデータを入力してから Html.BeginForm コンストラクターに渡すことができます。

それほど拡張可能なものが必要ない場合は、Html.BeginForm のオーバーロードされたコンストラクターを使用できます。 @Html.BeginForm("login", "customer", new {ReturnUrl = @Request.QueryString["ReturnUrl"]},FormMethod.Post, new {data-id="something"});

于 2011-09-06T17:54:13.333 に答える
3

Reflector を使用してコードを確認し、

BeginForm() は rawUrl を最終的なフォームに直接渡します。BeginForm のその他のオーバーロードは、クエリ文字列を削除するヘルパー ユーティリティを通過します。

于 2015-04-02T17:37:06.730 に答える
-1

試す@using(Html.BeginForm(null, null, FormMethod.Post, new { data_id="something" }))

使用したかのように、デフォルトのロジックを使用して URL を構築する必要があります。BeginForm()

(そのような場合でも試したことはありませんが、うまくいくはずだと思います)

于 2011-09-06T17:23:21.750 に答える