2009-09-19 16 views
7

私はSSLとして送信したい非SSLページにフォームを持っています。私はHtml.BeginFormを使用してフォームを作成していますが、これは必須ではありません。 私はそれを設定可能にすることができればいいと思うので、私はdevサーバまたは私のラップトップでSSLをオフにしてプロダクションサーバで有効にするように設定するフラグを持つことができます。SSLでなければならないHtml.BeginForm()でフォームを作成する最も良い方法は?

私はURL全体を設定項目にすることができますが、私はそれをより柔軟にすることができたと思っていましたので、真または偽の設定しかできませんでした。

答えて

5

Html.BeginFormによって作成されたフォームのaction属性を上書きできます。

<% 
    var actionURL = (Model.UseSSL ? "https://" : "http://") 
        + Request.Url.Host + Request.Url.PathAndQuery;  

    using (
      Html.BeginForm(
         "Action", 
         "Controller", 
         FormMethod.Post, 
         new { @action = actionURL } 
         ) 
     ) 
%> 

Model.UseSSLフラグの使用に注意してください。このフラグは、コントローラによってこのビューに渡される必要があります。

+0

これは私が必要なものかもしれません。私はそれを試してみましょう! – Zack

+0

ActionLinkはアンカータグをレンダリングします。 URLを返すが、プロトコルを指定する同じオプションがあるものはありますか? – Zack

+0

投稿を編集しました。私はあなたがフォームアクション自体をオーバーライドすることができるかもしれないと信じています。それでもうまくいかない場合は、Html.BeginFormを使わずにフォームタグを自分でレンダリングすることができます。その場合は、好きなようにアクション設定を制御できます。 –

3

私はそれが古い質問、 クリーナーソリューションのためだけの提案を知っている:// ...またはhttp

のための定期的な相対的な1:これは、HTTPSを含む絶対パスをレンダリングします

<form id="someLie" method="post" action="<%=Url.Action("action", "controller",new {}, YourConfigOrModel.UseSSL ? Uri.UriSchemeHttps : Uri.UriSchemeHttp) %>"> 
.. form elements.. 
</form> 

+3

私はこれに類似したものを試しましたが、私はフォームの目立たない検証を失いました。 – gt124

関連する問題