Asp.Net基礎 – 1.Web應用程式和網站 + 2.最簡單的ASP.Net程式處理過程 + 3.ASP.Net的IsPostBack揭秘

來源:互聯網
上載者:User
文章目錄
  • 邏輯處理樣本:
 
1.Web應用程式和網站2.最簡單的ASP.Net程式處理過程3.ASP.Net的IsPostBack揭秘

 

1.Web應用程式和網站
 

WebApplication(Web應用程式)和WebSite(網站)的區別,WebSite是為了相容從ASP轉過來的開發人員的習慣而存在的,用起來簡單,比如不需要建立命名空間、CS代碼修改以後不需要重啟就能看到變化(無論是WebSite還是WebApplication,修改aspx都不需要重啟。 WebApplication每次修改以後點擊【產生解決方案】也能立即看到修改效果),但是不利於工程化開發,比如代碼出錯不容易發現,代碼不分命名空間。開發技術上沒有任何區別,只是開發、調試習慣不同而已。方便開發不用每次調試都設定起始頁,在項目的選項中設定【Web】→啟動操作→當前頁面,這樣當前啟用的頁就是起始頁。講簡單基礎知識時用WebSite;講進階技術和做項目的時候用WebApplication。

建立WebApplication

建立WebSite

 

2.最簡單的ASP.Net程式處理過程
 

提交到伺服器的表單元素一定要加上"name"元素

每當使用者請求訪問ashx頁面的時候,ProcessRequest方法就會被調用,通過訪問context.Request獲得訪問者的請求參數等。例子中就取到了UserName參數.

然後在ProcessRequest中通過context.Response向瀏覽器發回資料給瀏覽器。ProcessRequest結束之時就是伺服器為這個瀏覽者本次訪問服務完成之時,瀏覽器向伺服器端提交資料,被提交資料的表單(input、select、textarea等)放到form中,form中通過action屬性設定表單被提交給哪個頁面,為了在服務端取出表單項的值,需要在HTML中為表單元素設定name屬性,注意id是給Javascript操作Dom用的,name才是提交給伺服器用的。在伺服器端用context.Request["username"]來根據表單項的name來獲得提交的屬性值。通過context.Response.Write向瀏覽器輸出處理後的顯示HTML內容。

建立一個ashx檔案, ProcessRequest中寫

context.Response.ContentType = "text/html";//html表示瀏覽器識別成html語言string username = context.Request["UserName"];//取得使用者提交過來的name為UserName的表單的值context.Response.Write(username + 你好);

建立一個html頁面,建立一個form,設定action指向剛才寫的ashx檔案,那麼點擊submit的時候,就會把表單裡面的參數都傳遞個Hello1.ashx檔案了

<form action="Hello1.ashx">姓名<input type="text" name="UserName"/><input type="submit" value="提交"/></form>

但是這樣做的話,啟動瀏覽器從html跳轉到ashx頁面,之前的使用者名稱和輸入框就沒有了,解決這個問題沒有太好的辦法,只好把先前的樣子在ashx檔案中再畫出來,見程式

public void ProcessRequest (HttpContext context) {        context.Response.ContentType = "text/html";        string userName = context.Request["UserName"];        context.Response.Write(@" <form action='Hello1.ashx'>姓名:<input name='UserName' type='text' /><input value='提交' type='submit' /></form> ");//這一行操作是把先前的html原有的東西畫出來,把之前的html代碼,寫到context.Response.Write就可以了(@的意思是多行文本不被分開識別)        //context.Response.Write("Hello World");        context.Response.Write(userName);    }

 

也可以使用context.Server.MapPath內建讀取

     context.Response.ContentType = "text/html";        string userName = context.Request["UserName"];        string path = context.Server.MapPath("Hello2.html");//擷取Hello2.htm的全路徑,所以用了MapPath方法        string content = System.IO.File.ReadAllText(path);//讀取檔案        context.Response.Write(content);                //context.Response.Write(path);        context.Response.Write(userName);

這樣就不用拷貝htm的全部代碼了,而且不用先開啟htm,再跳轉到ashx.現在直接開啟ashx檔案就能顯示出htm頁面裡面的全部內容了.

 

3.ASP.Net的IsPostBack揭秘

 

剛進入hello2.ashx的時候是直接向瀏覽器輸出內容,使用者在輸出的內容中填入數值,再點擊提交,伺服器就知道“提交回來了”(PostBack)

為了區分是第一次直接進入頁面還是點擊提交以後重新進入ashx,在form中增加一個隱藏欄位:<input type="hidden" name="ispostback" value="true" />,如果能夠從Request中讀取到ispostback=true就說明是點擊提交以後重新進入ashx,否則就是第一次進入ashx。ispostback就是一個標誌位。

<input type="hidden" name="ispostback" value="true"/>

 

string ispostback = context.Request["ispostback"];        if (ispostback == "true")        {            context.Response.Write("提交後進入");        }        else        {            context.Response.Write("直接進入");        }

 

Http是請求、響應的模型,伺服器不會來讀取瀏覽器的網頁,能夠得到的就是用戶端網頁提交過來的資料。邏輯處理樣本:

先寫預留位置@vlaue,@msg,然後再ashx(@value也可以寫$value,自己定義,前後一致就行)

public void ProcessRequest(HttpContext context)    {        context.Response.ContentType = "text/html";        string userName = context.Request["UserName"];        string msg = "";//聲明msg變數               string ispostback = context.Request["ispostback"];        if (ispostback == "true")        {            context.Response.Write("提交後進入");            msg = userName + "您好!";        }        else        {            context.Response.Write("直接進入");            msg = userName + "";        }        string path = context.Server.MapPath("Hello2.html");//擷取Hello2.htm的全路徑,所以用了MapPath方法        string content = System.IO.File.ReadAllText(path);//讀取檔案        content = content.Replace("@value", userName);//替換預留位置@value        content = content.Replace("@msg", msg);        context.Response.Write(content);    }

提交前

提交後

所有表單都是提交的以name為key,以value為值的內容,其他屬性是不會被提交到伺服器的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.