2009-09-19 42 views
7

我在我想提交爲SSL的非SSL頁面上有表單。我使用Html.BeginForm創建表單,但這不是必需的。 如果我可以對其進行配置,這也會很好,這樣我就可以設置一個標誌,以便在開發服務器或筆記本電腦上關閉SSL,然後在生產服務器上將其打開。用Html.BeginForm()創建窗體的最佳方式應該是SSL?

我知道我可以讓整個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 2009-09-19 18:10:19

+0

ActionLink呈現錨定標記。有什麼會返回的網址,但有指定協議相同的選項? – Zack 2009-09-19 18:15:53

+0

我編輯了帖子。我相信你可以重寫窗體操作本身。如果這不起作用,您可以在不使用Html.BeginForm的情況下自己渲染表單標籤,在這種情況下,您可以控制其操作設置,但不管您喜歡。 – 2009-09-19 18:19:33

3

我知道這是一個老問題, 只是一個清潔的解決方案建議:

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

這將使絕對路徑包含https://開頭..或正確的相對一個HTTP

+3

我試過類似的東西,我失去了不顯眼的窗體驗證。 – gt124 2011-09-26 15:44:26

相關問題