国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設(shè)計 > 正文

【ASP.NET基礎(chǔ)】表單和控件

2019-11-14 16:01:11
字體:
供稿:網(wǎng)友

1.HTML表單的提交方式

對于一個普通HTML表單來說,它有兩個重要的屬性:action 和 method。
action屬性指明當前表單提交之后由哪個程序來處理,這個處理程序可以是任何動態(tài)網(wǎng)頁或者 servlet 或者 CGI(Common Gateway Interface),在asp.net里面一般都是都aspx頁面來處理。
method屬性指明form表單的提交方式。它有兩個可能值get和post。

(1)get方式提交的表單在地址欄會顯示參數(shù)名和參數(shù)值,而post方式不會。用post提交參數(shù)相對來說更隱蔽一些,也相對安全一些。假如我們這個頁面用于用戶登錄并且存放用戶信息的表為“users”,我們的sql語句可能會這么寫:

string sql=” select * from users where username='”+username+”’ and passWord='”+password+”’”;

 

然后我們的 username 和 password 變量從表單提交的數(shù)據(jù)獲取,正常情況下用戶填寫是沒有問題,就上面的例子來說用戶填寫的用戶名和密碼分別是“sa”和“123456”,那么我們最后得到的SQL語句是:

sql=”select * from users where username=’sa’ and password=’123456’”

 

這樣是沒有問題的。

如果用get方式提交,用戶可以對上面的參數(shù)進行一些改動,比如在地址欄直接輸入:

http://localhost/GetUserInfo.aspx?username=zhoufoxcn&pwd=123';delete * from users'

 

那么我們得到的SQL就是:

string sql=” select * from users where username='zhoufoxcn' and password='123';delete * from users'

 

執(zhí)行上面的SQL語句就能把Users這個表里的所有數(shù)據(jù)刪除掉!這個一個觸目驚心的危險!這個就叫SQL注入。


(2)由于瀏覽器地址欄能輸入的最大字符數(shù)有限制,所以用get方式提交不能處理參數(shù)值更大的表單,而post方式則沒有這個限制。

 

2.獲取表單值

通過用get方式提交表單我們可以看到提交到服務器的時候,在網(wǎng)頁后面有“?username=sa&pwd=12345”這么一個字符串,也就是以表單里HTML控件的名字=控件值的方式,并且如果存在多個控件,彼此之間以“&”分割,那么我們就可以以控件名來獲取控件值。獲取HTML控件值常見有以下集中方式:

 

 獲取方式 表單提交方式
 Request.QueryString["控件名"]  適合于get方式提交的表單
 Request.Form["控件名"] 適合于post方式提交的表單
 Request["控件名"] 同時適合于get和post方式提交的表單

 

3.亂碼問題

對于用戶登錄的表單,我們在用戶名和密碼處分別輸入“小姑涼”和“123456”,用戶就可能會變成“???”,之所以出現(xiàn)這樣的情況就是因為我們的編碼原因。

所謂亂碼,就是用一種編碼的字符串卻用了另一種編碼來顯示,造成不能正常顯示的現(xiàn)象。
這就像我們在酒吧里對一個懂普通話的服務員說來一杯酒,他馬上會送你一杯酒;可是當我們對一個不懂普通話的服務員用普通話說來一杯酒,他就會一頭霧水了。
之所以出現(xiàn)亂碼就是因為在這里客服端請求的編碼和服務器響應的編碼不一致

默認情況下 Request 的 ContentEncoding 為 UTF8Encoding ,而 Response 的 ContentEncoding 為 System.Text.DBCSCodePageEncoding ,二者的不一致導致了輸入中文成了亂碼。

我們常見的編碼有 gb2312、gbk 和 unicode 幾種,gb2312 能顯示日常生活最常用的 6000 多個漢字,這對于一般的公文足夠了,可是如果要用來顯示一個古文獻就不行了(據(jù)說康熙詞典收錄了4萬多漢字),當它不能顯示的時候也會出現(xiàn)亂碼。
Gbk 是在 gb2312 的基礎(chǔ)上擴展的,大概能顯示1萬8千多個漢字,這對于一般古文獻也差不多夠了。
Unicode 則更大一些,它能顯示 20901 個漢字(范圍是從/u4e00到/u9fa5),并且還能顯示日文、韓文、臺灣文字、香港文字和新加坡等文字,所以目前很多網(wǎng)站都采用unicode編碼。Utf8編碼就是unicode編碼中的一種。

<%@ Page Language="C#" ContentType="text/html" ResponseEncoding="gb2312" %>


更改為:

<%@ Page Language="C#" ContentType="text/html" ResponseEncoding="utf-8" %>


這樣就能正常顯示了。
建網(wǎng)站的時候默認編碼就是utf-8,無需更改。

4.服務器端表單

在此之前我們見到的表單都是如下格式:

<form action="接收數(shù)據(jù)頁面" method="post">

 

并且我們都是利用的HTML控件?,F(xiàn)在我們要介紹服務器端表單,服務器端表單與前面的表單相比,多了一個runat=”server”標記,如下:

<form id="form1" runat="server">

 
在服務器端表單里可以不用指定action屬性,表示由當前頁面處理,也可以不指定 method 屬性,默認為post方式提交表單。在服務器端表單里,我們不光可以使用 HTML 控件,還可以使用 HTML 服務器控件,還可以使用 asp.net 控件 。
另外需要注意的是,在一個 asp.net 頁面中可以有多個不帶 runat=”server” 標記的表單,但是只能有一個服務器端表單。

5.HTML服務器控件

HTML服務器控件與普通服務器控件不同的是:在普通HTML控件中加上了一個 id 屬性和一個 runat=”server” 標記。如下就是一個 HTML 服務器控件:

<input type="text" runat="server" id="txtUserName" />

 
HTML服務器控件有幾個限制:
在整個 asp.net 頁面中這個控件 id 的必須唯一,并且 HTML 服務器控件只能放在 HTML 服務器表單中。因為一個 asp.net 頁面只能有一個服務器表單,所以說在服務器表單中控件的 id 值必須唯一,因為我們在編程的時候通過這個 id 來訪問 HTML 服務器控件。如果不唯一就會報錯。

所有的服務器控件經(jīng)過服務器運行之后都會變成標準的 HTML 控件。
這樣我們可以得出一個結(jié)論:如果我們的控件功能本來就很簡單,我們就可以直接使用HTML控件,這樣就可以減輕服務器的負擔,提高運行效率。

另外,在上面的代碼中多了一些以前我們沒有見過的部分:

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJNTQ0MjI5MTUzZGR1mFZ52ODFgAKe7Qx9/67qMGFJCA==" /><input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWBAKipeT6DgKl1bKzCQK1qbSRCwLdkpmPAcJ7Zy/C66y />


因為服務器會保存服務器控件的狀態(tài)和屬性,所以它會利用一些隱藏域來保存這方面的信息,這部分的內(nèi)容是經(jīng)過 Base64 編碼的。
 
服務器控件的好處是我們可以動態(tài)在代碼中動態(tài)控制服務器控件的屬性。

來源:http://zhoufoxcn.blog.51cto.com/792419/166808


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 西宁市| 连云港市| 蒙自县| 封丘县| 渝中区| 德惠市| 平阴县| 铁岭县| 武乡县| 仙游县| 齐齐哈尔市| 东山县| 城口县| 和田县| 越西县| 兴业县| 高邮市| 留坝县| 营山县| 蚌埠市| 正宁县| 青阳县| 泾阳县| 响水县| 三门峡市| 集安市| 修武县| 平和县| 腾冲县| 丁青县| 石家庄市| 洪泽县| 大关县| 义乌市| 康乐县| 深泽县| 灵丘县| 南汇区| 昌平区| 轮台县| 寻甸|