2009-09-19 8 views
7

Ho un modulo su una pagina non SSL che desidero inviare come SSL. Sto creando il modulo utilizzando Html.BeginForm ma non è necessario. Sarebbe anche bello se potessi renderlo configurabile, in modo da poter avere una bandiera che ho impostato in modo che sul server di sviluppo o sul mio portatile posso disattivare l'SSL e accenderlo nel server di produzione.Il modo migliore per creare un modulo con Html.BeginForm() che dovrebbe essere SSL?

So che potrei semplicemente rendere l'intero URL un elemento di configurazione, ma speravo che avrei potuto renderlo più flessibile in modo da poter avere solo un'impostazione vera o falsa.

risposta

5

È possibile eseguire l'override dell'attributo action del modulo creato da Html.BeginForm.

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

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

Nota l'uso del flag Model.UseSSL, che deve essere passato a questa visualizzazione dal proprio controller.

+0

questo potrebbe essere quello che mi serve. fammi provare – Zack

+0

ActionLink esegue il rendering di un tag di ancoraggio. C'è qualcosa che restituirà l'url ma ha la stessa possibilità di specificare il protocollo? – Zack

+0

Ho modificato il post. Credo che potresti essere in grado di ignorare l'azione dei moduli stessa. Se ciò non funziona, puoi eseguire il rendering del tag del modulo da solo senza Html.BeginForm, nel qual caso puoi controllare le sue impostazioni di azione come preferisci. –

3

Lo so che è una vecchia questione, solo un suggerimento per una soluzione più pulita:

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

questo renderà un percorso assoluto che contiene i https: // .. o un parente uno regolare per http

+3

Ho provato qualcosa di simile a questo e ho perso la convalida non invadente per il modulo. – gt124

Problemi correlati