2009-09-19 8 views
7

Mam formularz na stronie bez protokołu SSL, który chcę przesłać jako SSL. Tworzę formularz przy użyciu Html.BeginForm, ale nie jest to wymagane. Byłoby również miło, gdybym mógł skonfigurować go tak, żebym mógł ustawić flagę tak ustawioną, że na serwerze dev lub na moim laptopie mogę wyłączyć SSL i włączyć go na serwerze produkcyjnym.Najlepszy sposób na tworzenie formularza za pomocą Html.BeginForm(), który powinien być SSL?

Wiem, że mógłbym ustawić cały adres URL jako element konfiguracji, ale liczyłem na to, że będę mógł uczynić go bardziej elastycznym, więc mógłbym mieć ustawienie prawdziwe lub fałszywe.

Odpowiedz

5

Można zastąpić atrybut działania formularza utworzonego przez Html.BeginForm.

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

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

Należy zwrócić uwagę na użycie flagi Model .SSL, która powinna zostać przekazana do tego widoku przez jej kontroler.

+0

to może być to, czego potrzebuję. pozwól mi spróbować! – Zack

+0

Link ActionLink renderuje znacznik zakotwiczenia. Czy jest coś, co zwróci adres URL, ale ma tę samą opcję określenia protokołu? – Zack

+0

Edytowałem post. Sądzę, że możesz zastąpić samą akcję formularzy. Jeśli to nie zadziała, możesz wyrenderować znacznik formularza bez Html.BeginForm, w którym to przypadku możesz kontrolować jego ustawienia akcji, jak chcesz. –

3

wiem, że to stara sprawa, tylko sugestia dla czystszego rozwiązania:

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

to uczyni absolutną ścieżkę zawierającą https: // .. lub regularnego stosunku jeden do http

+3

Próbowałem coś podobnego do tego i straciłem dyskretną walidację formularza. – gt124

Powiązane problemy