位置:首頁(yè) > 軟件操作教程 > 編程開(kāi)發(fā) > C# > 問(wèn)題詳情

C# ASP.NETWeb Forms

提問(wèn)人:劉團(tuán)圓發(fā)布時(shí)間:2020-12-09

選擇ASP.NETWeb Forms而不是其他框架的原因是:

    ? 對(duì)于中小型開(kāi)發(fā)團(tuán)隊(duì)和開(kāi)發(fā)項(xiàng)目而言,Web Forms是最理想的選擇 

    ? 對(duì)于需要在HTTP通信中維護(hù)會(huì)話和狀態(tài)的Web應(yīng)用程序而言,Web Forms很有用 

    ? Web Forms基于非常直觀的一組請(qǐng)求管道事件

    相對(duì)于其他ASP.NET風(fēng)格,ASP.NET Web Forms是快速開(kāi)發(fā)和部署功能豐富、性能良好的Web應(yīng)用程序的最好、最簡(jiǎn)單的方法。表示邏輯和業(yè)務(wù)邏輯分離開(kāi)來(lái),與前端用戶界面開(kāi)發(fā)人員和后臺(tái)編碼人員的技能集很好地對(duì)應(yīng)起來(lái)。這是一種理想情況,因?yàn)閳F(tuán)隊(duì)可讓具備不同技能的人員同時(shí)開(kāi)發(fā)項(xiàng)目的不同方面。

    ASP.NET Web Forms 常被認(rèn)為是“臃腫的”,原因在于 viewstate 功能。viewstate 是在 ASP.NET Web Form 中維護(hù)狀態(tài)的一種方式。例如,假設(shè)一個(gè)Web應(yīng)用程序需要完成并提交一系列頁(yè)面才能下訂單。如果用戶在整個(gè)過(guò)程中的某一步單擊了返回按鈕,將使用原來(lái)輸入的值重新填充之前的表單,這就是通過(guò)viewstate實(shí)現(xiàn)的。viewstate功能的問(wèn)題是可能被濫用(過(guò)度使用),導(dǎo)致在客戶端和服務(wù)器之間來(lái)回傳遞非常大的頁(yè)面。另外,默認(rèn)情況下,viewstate是針對(duì)Page啟用的,而非只針對(duì)需要維護(hù)狀態(tài)的Web頁(yè)面控件啟用。

    為避免viewstate帶來(lái)的問(wèn)題,最好在Page級(jí)別禁用它,這只需要將EnableViewState屬性設(shè)為felse。例如,如果之后需要維護(hù)TextBox的狀態(tài),可使用下面的代碼來(lái)專(zhuān)門(mén)針對(duì)TextBox啟用viewstate。另外,需要監(jiān)控.aspx文件的大小,確保它們不會(huì)變得太大。

    <asp:TextBox EnableViewState="true" ID="Name" runat="server" />

    沒(méi)有會(huì)話,就無(wú)法維護(hù)狀態(tài)。維護(hù)會(huì)話這個(gè)概念源于客戶端/服務(wù)器計(jì)算時(shí)代,在當(dāng)時(shí),計(jì)算機(jī)與服務(wù)器之間的連接是永久保持的。HTTP協(xié)議是沒(méi)有狀態(tài)的,特別適合處理靜態(tài)(即非動(dòng)態(tài))的內(nèi)容。


    ASP.NET Web Forms之所以是動(dòng)態(tài)的,是因?yàn)榇a隱藏文件(如Default.aspx.es)中使用的C#代碼,當(dāng)請(qǐng)求該文件時(shí),其中的代碼就會(huì)執(zhí)行。返回給瀏覽器的HTML很可能是碼基于客戶端/用戶的獨(dú)特輸入來(lái)改變的。根據(jù)會(huì)話cookie中存儲(chǔ)的內(nèi)容,返回的HTML對(duì)于每個(gè)客戶端也可能是不同的。ASP.NET Web Forms程序員使用以下語(yǔ)法在會(huì)話中存儲(chǔ)信息:

    Session["username"] = TextBoxUID.Text;

在后續(xù)HTTP請(qǐng)求中,可使用以下代碼來(lái)訪問(wèn)名為username的會(huì)話變量:

    var username = Session["username"];

最后,在執(zhí)行 ASP.NET Web Forms 請(qǐng)求時(shí)會(huì)發(fā)生一些事件,如 BeginRequest、AuthenticateRequest、Init、Load、ProcessRequest和EndRequest等,它們的含義不言自明。這一點(diǎn)很重要,因?yàn)楫?dāng)程序員想采取一些特殊操作來(lái)驗(yàn)證客戶端的身份,或在完成請(qǐng)求之前清理數(shù)據(jù)時(shí),很容易判斷在什么地方添加相關(guān)代碼。

繼續(xù)查找其他問(wèn)題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部