2010-09-22 18 views
0

我想將一個經典的ASP頁面轉換爲ASP.NET 3.5。在ASP.NET中的GET表格

在頁面上,有一個小表格可將您的電子郵件地址提交給外部新聞站點。下面的代碼:

<form name="emailForm" action="http://www.site.com/emailsignup.aspx" method="get"> 
    <input type="text" name="email" /> 
    <input type="submit" id="btnSubmit" name="btnSubmit" /> 
</form> 

我希望我只是能夠刪除該網頁上,它會工作,但它不,它只是重新加載頁面。

我該怎麼做?它是否需要在按鈕的單擊事件後面的代碼中完成?

+0

什麼是您的頁面的文件名? – 2010-09-22 21:05:37

+3

你有一個表格封閉你的整個頁面嗎?這會打破它,因爲你不能在窗體內部有窗體。 – 2010-09-22 21:09:19

+0

@Kirk - Default.aspx,在根目錄下。 – Steven 2010-09-22 21:09:27

回答

3

在ASP.Net中,默認情況下,控件 - 如按鈕 - 會導致回發將頁面提交回自己EVEN如果您將頁面上的action屬性設置爲另一個文件。你想要什麼叫做跨頁面發佈。下面的MSDN頁面展示瞭如何與ASP.Net 4做到這一點,但在頂部的鏈接獲得舊版本:

http://msdn.microsoft.com/en-us/library/ms178140.aspx

http://msdn.microsoft.com/en-us/library/ms178139.aspx

否則,你可以只使用按鈕的Click事件處理程序在後面的代碼中。

希望這會有所幫助。

+0

我懷疑這隻適用於所有控件通常嵌套的表單。添加一個不同的表單(ASP.NET使用的表單之外)不會有這些限制。你知道嗎? – 2010-09-22 21:24:45

+0

我假設你的意思是在沒有runat =「server」的情況下添加一個額外的表單,因爲在頁面中不能有多個服務器端表單。如果這就是你的意思,那麼你是正確的,它不會回發,但你將無法使用服務器端控件或視圖狀態與正常形式。問題是我相信OP已經在服務器表單中插入了html表單,這是不推薦的。根據結果​​,似乎外部服務器表單正在接管並重新發布。 – 2010-09-22 22:25:06

0

你必須在表單標籤丟失runat="server"

嘗試通過IDE創建一個網頁,並粘貼在表格標籤

<input type="text" name="email" /> 
<input type="submit" id="btnSubmit" name="btnSubmit" /> 
+0

爲什麼runat =「server」會改變_client_端發生的事情。表單的回發點擊錯誤的服務器。即頁面來自哪個頁面而不是action屬性中指定的頁面。 – 2010-09-22 21:28:22

0

它肯定已經結束嵌套在之間的輸入標籤的代碼表單默認情況下爲aspx。

根據您的頁面佈局,您可以對其進行修改,使其不會以嵌套形式結束。如果這是不可能的,我認爲你無法繞過使用表單,所以你必須看看不同的解決方案,比如使用js構建get。

0

最簡單的方法是將<form>標籤放在通常包裝所有ASP.NET控件的主標籤<form runat="server">之外。

如果您使用的是母版頁,您可以使用的唯一內容佔位符是<form runat="server"標籤內,或者你需要的主要<form runat="server">標籤內的頁面結構這種形式的標籤,那麼你需要:

取出簡單的<form>標籤,但保留HTML <input>標籤。處理提交按鈕的客戶端onclick事件(JavaScript版本,而不是ASP.NET回發處理程序)。該處理程序應該從文本框中抓取電子郵件,並在Javascript中發出類似window.location = 'http://www.site.com/emailsignup.aspx?email=....'的內容。確保取消默認的HTML按鈕操作處理程序,這樣它就不會冒泡並提交ASP.NET表單。