嘿嘿,這里就簡單的總結一下初步學習webform以及對他的認識,其實大家都認為webform很討厭,因為好多都是給我們封裝好的,而且現在好多的公司已經慢慢的從中逃離出來選擇使用mvc架構,甚至好多的項目選擇使用html和ashx來做項目,怎么說那,具體的市面上的情況對於我這個還未踏進社會的小菜鳥來說,具體的總結不清楚吧,無論怎么樣還是來了解一下webform吧。
一.了解webform
首先我們在項目中新建一個網站,然后添加一個web窗體,然后我們會看到如下所示:



上面一個是aspx類,一個是aspx.cs類,而aspx.cs類是前台的類,幫助我們呈現頁面的,由上面的截圖可知,我們的前台類繼承了page類,而page類繼承了IHttpHandler接口,我們在前面的學習中可以知道,只要實現了IHttpHanlder接口的類都會存在一個方法,即ProcessRequest(),而該方法在這里是一個虛方法,那么它是可以重寫的。

下面就來說一下前台類,首先我們打開前台類看第一行就看到了如上所示的一行代碼,而Language指的是我們開發的語言,AutoEventWireup是指頁面可執行事件,CodeFile指的是可執行代碼,Inberits是繼承的意思,由此可知:在這里我們的前台類繼承了我們的后台類。
在這里我們的前台類其實就是一個html標簽添加一個runat=server輸出,那么他就不再是一個html頁面即改變成為一個服務器控件,而控件的本質其實就是一個對象。這里我們首先要了解到這里。學習過繼承關系我們知道,父類的屬性或者方法在子類里面我們可以使用,但是轉過來父類使用子類的屬性或者方法當然在繼承的關子中是不可能事件,轉回來說,在這里仍然是在前台類的標簽里面添加runat=server即可實現,.Net框架會幫助我們隱式創建對象,在這里我們看不到,但是可以借助微軟內部的一個工具是可以查看到的。
二.登錄實例如下:


public partial class fmLogin : System.Web.UI.Page { UsermessBll bll = new UsermessBll(); protected void Page_Load(object sender, EventArgs e) { if (Request.HttpMethod == "POST") { string context = this.txtname.Value; //獲取txtname的值 string pwd = this.txtpwd.Value; //獲取txtpwd的值 if (bll.GetLogin(context, pwd)) { Response.Write("<script>alert('登陸成功')</script>"); } else { Response.Write("<script>alert('登陸失敗')</script>"); } } else { } } }
public class UsermessBll { UsermessDal dal = new UsermessDal(); public bool GetLogin(string context,string pwd) { List<UsermessModel> list = dal.GetLogin(); UsermessModel model = list.SingleOrDefault(i=>i.UserName==context||i.Email==context||i.TelPhone==context); //使用LinQ表達式判斷使用其中一個賬號登錄即可,這是我之前寫的登錄不同之處,其實感覺使用這個理解上更加容易 if (!model.Equals(null)) //輸入的賬號與讀取的賬號經過選擇之后如果為空則不存在此用戶名 { if (!model.Pwd.Equals(null)) //輸入的賬號存在,而輸入的密碼與讀取的密碼經過選擇之后如果為空則仍然返回一個false { return true; } else { return false; } } else { return false; } } }
public class UsermessDal { public List<UsermessModel> GetLogin() { string sql = "select * from Usermess"; SqlDataReader reader = SQLHelper.ExecuteReader(sql,CommandType.Text); List<UsermessModel> list=new List<UsermessModel> (); //定義一個集合 while (reader.Read()) { UsermessModel model = new UsermessModel(); //實例化對象,給讀取的值賦值給model model.Id = Guid.Parse(reader[0].ToString()); model.UserName = reader[1].ToString(); model.Email = reader[2].ToString(); model.TelPhone = reader[3].ToString(); model.Pwd = reader[4].ToString(); list.Add(model); } return list; } }
上面是使用webform創建的一個登陸小程序的代碼,其實這寫的程序和之前還是有所差別的,首先說在獲取用戶名或者密碼時間是使用的this.(id值).Value實現的,而之前學習的ashx是使用context.Request.Form["(name值)"]或者context.Request.QueryString["(name值)"]來獲取的;還有就是我們這里在dal層寫的方法有所不同,並沒有通過數據庫語句來判斷,而是在bll層使用LinQ來判斷,這就是這次寫的登錄小程序和之前不同之處,需要學習的地方。
另外想說的是Guid,我們需要注意轉換的方法,如果想創建一個Guid變量,那么就需要使用Guid a=Guid.NewGuid()即可,而其他類型轉換為Guid類型的值就如上dal層的轉換方式。
我們來看一下運行時間的前台代碼和之前我的前台頁面的區別:

看一下上面的圖我們知道使用控件時間還會生成一些ViewState,非常浪費資源,當然這只是其中的一點,另外就是好多的類都封裝起來,使我們這些初學者入門容易,但是提高起來還是不知道從哪里開始的,控制不是很靈活,服務器控件控制起來不是很容易的,簡單的我就知道這些吧,具體的我也可以說不是很懂···
好啦,今天就寫到這里,很糟糕的事在我身上發生了,我寫好這篇博客后沒有及時保存,然后網頁跳轉就導致找不到寫過后的博客,雖然使用了本地自動保存,但是仍然沒有結果,很是失望哦,所以只得重新再來,終於寫完了,要睡覺啦,嘿嘿。
