asp.net 表单总结
ASP.NET Web Forms - HTML 表單
http://www.runoob.com/aspnet/aspnet-forms.html#
所有的服務器控件都必須出現在 標簽中, 標簽必須包含 runat=“server” 屬性。
ASP.NET Web 表單
所有的服務器控件都必須出現在 標簽中, 標簽必須包含 runat=“server” 屬性。
runat=“server” 屬性表明該表單必須在服務器上進行處理。同時也表明了包含在它內部的控件可被服務
器腳本訪問:
...HTML + server controls注釋:該表單總是被提交到自身頁面。如果您指定了一個 action 屬性,它會被忽略。如果您省略了
method 屬性,它將會默認設置 method=“post”。同時,如果您沒有指定 name 和 id 屬性,它們會由
ASP.NET 自動分配。
注釋:一個 .aspx 頁面只能包含一個 控件
如果您在一個包含不帶有 name、method、action 或 id 屬性的表單的 .aspx 頁面中選擇查看源代碼,
您會看到 ASP.NET 添加這些屬性到表單上了,如下所示:
...some code提交表單
表單通常通過點擊按鈕來提交。ASP.NET 中的 Button 服務器控件的格式如下:
<asp:Button id=“id” text=“label” OnClick=“sub” runat=“server” />
id 屬性為按鈕定義了一個唯一的名稱,text 屬性為按鈕分配了一個標簽。onClick 事件句柄規定了一
個要執行的已命名的子例程。
在下面的例子中,我們在一個 .aspx 文件中聲明了一個按鈕控件。一次鼠標單擊就可以運行一個子例程
,可以更改該按鈕上的文本。
實例
========
ASP.NET中Form表單不可以嵌套使用
https://www.jb51.net/article/73225.htm
我非常確定在ASP 中是可以有多個form 表單的,以前常常這樣干的,在后臺分類管理頁面中,把添加和
修改放在同一個頁面,這樣就需要用到兩個 form 表單進行提交服務器代碼處理。
經過測試,在ASP.NET 也是可以一個頁面有多個form 表單的,例如下面的代碼:
但是,form 表單不能進行嵌套使用,例如下面的代碼是錯誤的:
還有一點需要注意的是,ASP.NET 中,當頁面中有多個form 表單時,只允許一個form 帶有
runat=“server” 屬性,否則產生異常。這是一些 ASP.NET 編程入門的童鞋常犯的錯誤!
小編認為,在 ASP.NET 的編程模式中,很少情況一個頁面中出現兩個或多個form 表單。所在提交到服
務器代碼的功能都可以通過一個最外層的form 表單搞定,沒必要搞那么多,這也算是ASP.NET 與ASP 的
不同之處吧!
========
form表單:get 和post
get是通過url傳值,post是通過將表單值隱藏到http報文中不顯示get通過的數據有限,post才能傳遞大數據量但是post會有瀏覽器提示重新提交表單的問題,get則沒有。
========
ASP.Net中表單POST到其他頁面的方法分享
https://www.jb51.net/article/47065.htm
在ASP中,我們通常把表單提交到另外一個頁面(接受數據頁面)。但是在ASP.NET中,服務端表單通常
都是提交到本頁面的,如果我設置
代碼如下:
form1.action=“test.aspx”;
那么就會導致視圖驗證錯誤的錯誤,因為Asp.net安全機制引起的。我們也可以關閉這個驗證,在接受頁
面中(test.aspx)頭部加上
代碼如下:
<%@ Page EnableViewStateMac=“false” %>
但這樣做不是很安全,其實asp.net 2.0 還提供了一種方式提交到其他頁面,服務器按鈕控件提供了一
個屬性:PostBackUrl,這樣寫
代碼如下:
button1.PostBackUrl=“test.aspx”;
這樣就不會引起驗證錯誤的問題了,又很安全。
這里順便說一下動態修改form表單屬性的方法一些方法,與上面無關系:例如修改target屬性
普通頁面:
代碼如下:
((System.Web.UI.HtmlControls.HtmlForm)this.FindControl(“form1”)).Target = “_blank”;
或者
代碼如下:
form1.Attributes[“target”] = “_blank”;
含母版頁master:
代碼如下:
((System.Web.UI.HtmlControls.HtmlForm)this.Master.FindControl(“form1”)).Target = “_blank”;
前臺修改:
代碼如下:
<asp:Button ID=“btnSubmit” runat=“server” Text=“Button”
"btnSubmit_Click"OnClientClick=“this.form.target=’_blank’” />
========
asp.net 防止用戶通過后退按鈕重復提交表單
https://www.jb51.net/article/20904.htm
經過一番仔細的尋尋覓覓之后,我發現仍舊無法找出真正能夠完全禁用瀏覽器后退按鈕的辦法。所有這
里介紹的方法都能夠在不同程度上、以不同的方式禁止用戶返回前一頁面,但它們都有各自的局限。
防止用戶通過后退按鈕重復提交表單
<%
response.Buffer=true
response.Expires=0
response.ExpiresAbsolute=now()-1
response.CacheControl=“no-cache”
%>
response.Buffer=true的意思就是指明輸出頁面是否被緩沖,當屬性值為True時,服務器將不會向客戶
端發送任何信息,直到所有程序執行完或者遇到
<% Response.Flush %>或<% Response.End %>
語句,才會釋放緩沖區的信息。
Expires 屬性
Expires 屬性指定了在瀏覽器上緩沖存儲的頁距過期還有多少時間。如果用戶在某個頁過期之前又回到
此頁,就會顯示緩沖區中的版本
語法
Response.Expires [= number]
參數
number
距過期還有多少分鐘。將此參數設置為 0 可使緩存的頁立即過期。
注釋
若此屬性在一頁上設置了多次,則使用最短的時間。
應用于
Response 對象
Response.expires=0也表示立即過期,但如果client和server不在一個時區或者client的時間早于
server上的時間,則不能立即過期。所以用負數或者用Response.ExpiresAbsolute=now()-1來表示立即
過期,response.expires=1表示在1分鐘后過期。
asp中Response.ExpiresAbsolute=now()-1
在asp頁面中,通常會有這樣的設置。
Response.ExpiresAbsolute=now()-1‘設置過期時間的絕對值為當前時間-1,即出來后就過期了
這是因為默認情況下,瀏覽器將頁面先載入緩存,然后才顯示出來.通過上述設置,使瀏覽器對頁面不
進行緩存,所以當用戶點"后退"后,由于頁面沒有緩存,所以瀏覽器只能再次通過向服務器發出HT
TP請求來得到頁面,這樣就實現了限制了用戶對同一網頁進行多次操作。
asp中Response.Expires = -1
一般情況下,當用戶請求WEB服務器時,服務器把請求回復給客戶端。在客戶端,瀏覽器把緩存作為一種
加快速度的策略,就是當請求時先檢查緩存的情況,如果有就直接調緩存了,而不請求服務器了。
在WEB程序設計中,有時為了防止重復的提交或者嚴格的次序等,必須讓用戶的數據立即在使用后就過期
,當用戶后退時就顯示過期而不能繼續使用。也算是為安全考慮的吧。
一般,response.expires寫在頁面的最上端,后面跟的是一個時間,就是過期的時間,0表示立即過期。
asp中對瀏覽器緩存的設置
Response.CacheControl = “no-cache”
設置不緩存在臨時文件中.本句是指,上網時看到的圖片通常在internet的
接下來我們要討論的方法以后退按鈕本身為中心,而不是瀏覽器緩存。這兒有一篇文章Rewiring the
Back Button很值得參考。不過我注意到,如果使用這種方法,雖然用戶點擊一下后退按鈕時他不會看到
以前輸入數據的頁面,但只要點擊兩次就可以,這可不是我們希望的
效果,因為很多時候,固執的用戶總是能夠找到繞過預防措施的辦法。
另外一種禁用后退按鈕的辦法是用客戶端javascript打開一個沒有工具條的窗口,這使得用戶很難
返回前一頁面,但不是不可能。一種更安全但相當惱人的方法是,當表單提交時打開一個新的窗口,與
此同時關閉表單所在的窗口。但我覺得這種方法不值得認真考慮,因為我
們總不能讓用戶每提交一個表單就打開一個新窗口。
那么,在那個我們不想讓用戶返回的頁面是否也可以加入javascript代碼呢?在這個頁面中加入的
javascript代碼可用來產生點擊前進按鈕的效果,這樣也就抵消了用戶點擊后退按鈕所產生的動作。用
于實現該功能的javascript代碼如下所示:
同樣地,這種方法雖然有效,但距離“最好的方法”還差得很遠。后來我又看到有人建議用
location.replace從一個頁面轉到另一個頁面。這種方法的原理是,用新頁面的URL替換當前的歷史紀錄
,這樣瀏覽歷史記錄中就只有一個頁面,后退按鈕永遠不會變為可用。我想這可能正是許多人所尋求的
方法,但這種方法仍舊不是任何情況下的最好方法。使用這種方法的實例如下所示:
<A HREF=“PageName.htm” "javascript:location.replace(this.href);
event.returnvalue=false; ">
禁止后退到本頁面的鏈接
試試下面這個鏈接:
禁止后退到本頁面的鏈接!
這種方法的缺點在于:簡單地運用Response.Redirect將不再有效,這是因為每次用戶從一個頁面轉
到另一個頁面,我們都必須用客戶端代碼清除 location.history。另外還要注意,這種方法清除的是最
后一個訪問歷史記錄,而不是全部的訪問記錄。
點擊上面的鏈接,你將打開一個簡單的HTML頁面。再點擊后退按鈕,你可以看到這時打開的不是本
頁面,而是本頁面之前的頁面!(當然,你必須在瀏覽器中啟用了客戶端javascript代碼。)
經過一番仔細的尋尋覓覓之后,我發現仍舊無法找出真正能夠完全禁用瀏覽器后退按鈕的辦法。所
有這里介紹的方法都能夠在不同程度上、以不同的方式禁止用戶返回前一頁面,但它們都有各自的局限
。由于不存在能夠完全禁用后退按鈕的方法,所以最好的方案應該是:混合運用客戶端腳本和服務器端
腳本。
https://www.jb51.net/Special/494.htm
asp.net 表單操作專題
總結
以上是生活随笔為你收集整理的asp.net 表单总结的全部內容,希望文章能夠幫你解決所遇到的問題。