前言:從今天起我將寫一個這樣的系列,當然我主要是從最簡單的方面去介紹的哦!
- Web應用程序和網站
(1) WebApplication(Web應用程序)和WebSite(網站)的區別?WebSite是為了兼容從ASP轉過來的開發人員的習慣而存在的,用起來簡單,比如不需要創建命名空間,cs代碼修改后不需要重啟就可以看到變化(無論是WebSite還是WebApplication,修改aspx都不需要重啟),但是不利於工程化的開發,比如代碼出錯不容易發現,代碼不分命名空間,開發技術上沒有任何區別,只是開發,調試習慣不同而已。
- 基於ashx方式的asp.net開發
(1) 新建一個Html頁,命名為:hello1.Htm
1 <form action="hello.ashx"> 2 3 <input type="text" name="username" /> 4 5 <input type="submit" value="提交" /> 6 7 </form>
(2) 新建一個【一般處理程序】Hello1.ashx,ProcessRequest中寫入:
1 string username = context.Request["username"]; 2 3 context.Response.Write("hello world," + username);
(3) 每當用戶請求訪問ashx頁面的時候,ProcessRequest方法就會被調用,在這里通過訪問context.Request獲得訪問者的請求參數等,然后在ProcessRequest中通過context.Response向瀏覽器發回數據給瀏覽器,ProcessRequest結束之時就是服務器為這個瀏覽者本次訪問服務完成之時。
(4) 瀏覽器向服務器端提交數據,被提交數據的表單(input,select,textare等)放到Form中通過action屬性設定表單被提交到那個頁面,為了在服務器端取出來表單項的值,需要在HTML中為表單元素設定Name屬性,注意ID是給JS操作和Dom操作用的,name才是提交給服務器的,在服務器端用context.Request[“UserName”]來根據表單項的name來獲得提交的屬性值,通過context.Response.Write向瀏覽器輸出處理后的顯示HTML內容。
- 一段Jquery代碼的復習
1 $(function(){ 2 3 $(“#TextBox”).mouseover(function(){ 4 5 $(this).CSS(”Color”,”Red”); 6 7 }); 8 9 });
注解:此段代碼實現的功能是當鼠標離開控件是將控件中的字體顏色設置為紅色。
- “返回”提交頁面改進版
(1) 為了請求,返回的內容一樣,將頁面保存為1個Htm模板文本,模板中有一些待填值的占位符,第一次進入頁面的時候就直接訪問ashx,讀取Html模板,將待填值占位符設置為空,然后輸出到瀏覽器。
(2) 為了區分是第一次直接進入頁面還是點擊提交以后重新進入ashx,在Form中增加一個隱藏字段;<input type=”Hidden” name=”ispostback” value=”true”>,如果能夠從Request中讀取到ispostback=true就說明是點擊提交以后重新進入ashx,負責就是第一次進入ashx。
(3) ASP.NET中將Web虛擬路勁(/images/1.jpg)轉換為磁盤全路徑(d://www.mysite.images/1.jpg)的方法是HttpContext.Current.Request.MapPath(“/1/入門2.htm”)。
(4) 實現思路是:在ProcessRequest中首先從Request中讀取ispostback,如果讀取到true,說明是提交進入的,就加載模板,並且進行占位符用計算后的值替換,否則就將模板中的占位符清空直接輸出給瀏覽器。
(5) 剛進入Hello2.ashx的時候是直接向瀏覽器輸出內容,用戶在輸出的內容中填入數值,再點擊提交,服務器就知道提交回來了。(postback)
(6) 文本框上次輸入的值在提交表單后有顯示出來並不是理所當然的,是開發人員幫着讀取提交上來的值然后渲染上去的。這就是asp.net和cs的關系,用aspx重寫這個程序,使用ispostback等屬性,對比。
(7)http是請求,響應的模型,服務器不會來讀取瀏覽器的網頁,能夠得到的就是客戶端網頁提交過來的數據。
- Get和Post
(1) 還可以設定form的method屬性指定表單提交方式,get(默認值)是通過URL傳遞表單值,post傳遞的表單值是隱藏到http報文中的,URL中看不到。
(2) get和post的區別:get是通過URL傳遞表單值,post通過URL看不到表單域的值,get傳遞的數據是有限的,如果要傳遞大數據量不能用get,比如:type=”file”上傳文章,type=”password”傳遞密碼或者<textarea>發表大段文章,post則沒有限制,post會有瀏覽器提示重新提交表單的問題,get則沒有,對於post的表單重新敲地址欄目刷新就不會提示重新提交了,因為重新敲地址欄就沒有重新提交數據了。
(3) get方式url數據格式。服務器文件名后跟着”?”,由於客戶端可能向服務器提交多個鍵值對,鍵值對之間用”&”進行分割,如果url中有漢字,特殊符號等,則需要對URL進行編碼。
(4) 表單域只是設定了name的才會被提交給服務器(用gei方式看的清楚)。如果給submit按鈕設定name,那么按鈕的value也會被提交給服務器。
驗證代碼為:
1 string fullpath = context.Server.MapPath("Hello.htm"); //得到文件的全路徑 2 3 string content = System.IO.File.ReadAllText(fullpath); 4 5 //context.Response.Write(content); 6 7 string ispostback = context.Request["ispostback"]; 8 9 if (ispostback == "true") 10 11 { 12 13 context.Response.Write("提交進入"); 14 15 } 16 17 else 18 19 { 20 21 context.Response.Write("直接進入"); 22 23 } 24 25 <form action="hello1.ashx"> 26 27 <input type="hidden" name="ispostback" value="true" /><!--這是一個隱藏字段--> 28 29 姓名:<input type="text" name="UserName" /> 30 31 <input type="submit" value="提交" /> 32 33 </form>