web-dev-qa-db-ja.com

絶対URLを持つHtml.BeginForm()?

POSTアクションを絶対URLに設定する必要があります(例: http://www.cnn.com )。Htmlを使用する方法はありますか。 BeginForm()ヘルパーとそれにURLを渡しますか?

32
dale

BeginFormメソッドにはいくつかのオーバーロードがあります。フォームタグに目的のURLでaction属性を設定するには、BeginFormの次のオーバーロードを使用する必要があります。

BeginForm(String, String, FormMethod, IDictionary<String, Object>)
// here are the parameter names:
BeginForm(actionName, controllerName, method, htmlAttributes)

外部サイトに投稿したいので、actionNameとcontrollerNameを設定する必要はなく、nullのままにしておきます。

@Html.BeginForm(
   null, null, FormMethod.Post, new {@action="http://cnn.com/post"}
)

これは、アクションパラメータをエンコードしません。

64
Nikita Ignatov

HtmlHelper.BeginFormメソッドが行うことは、ローカルコントローラーをターゲットとする<form>タグを作成するのに役立つことだけです。外部サイトに投稿する場合は、実際の<form>タグを書き出すだけです。

<form action="http://www.example.com/someaction" method="post">
    Actual form content in here
</form>

これですべてです。 MVCフォームは、ViewStateやイベントフィールド、その他の魔法の要素がたくさんあるASP.NETWebFormsのフォームとは異なります。それらは通常の古いHTMLフォームです。

15
Aaronaught

mvcソースコードを確認してください。html.beginformメソッドは、ネイティブhtmlフォームのみを作成するだけでなく、クライアント検証用にsthを追加します。

if (htmlHelper.ViewContext.ClientValidationEnabled) 
{
    htmlHelper.ViewContext.FormContext.FormId = tagBuilder.Attributes["id"];
}

だからそれは問題になるでしょう、私は自分の拡張機能を書くだけです

0
Bill.Zhuang