質問

私の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 このため。

役に立ちましたか?

解決

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

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

または、パスとクエリストリングを備えたフォームをレンダリングするカスタムhtmlhelperextensionを作成することもできます。このhtmlhelperextensionでは、クエリストリング値を繰り返して、html.beginformコンストラクターに渡すroutevaluedictionaryに登録できます。

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

他のヒント

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

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

メソッドの過負荷に問題があるようなものでしたが、何かが何であるかを指定することで、うまく機能しているようです...

QueryStringから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" } })

リフレクターを使用してコードを見る、

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

これは私にとってはうまくいきます:

@using (Html.BeginForm("index", "Photos", routeValues: new { user = pUser, album = pAlbum, }, method: FormMethod.Get))

明示的なルート値と方法が必要なものです...

他の属性も追加したい場合に備えてください。以下のコードを使用します

@using (Html.BeginForm("actionName", "controllerName", routeValues: new { lang = "en" }, method:FormMethod.Post, htmlAttributes: new { @class= "my-form", enctype = "multipart/form-data" }))

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

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

(そのような場合はそれを試したことはありませんが、私はそれがうまくいくべきだと思います)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top