記得上一次博客中實現的是其登錄頁面,其實學會了登錄頁面,注冊頁面自然就知道怎么寫啦,都是一個意思的,但是今天不知道怎么個情況,寫一個注冊頁面程序 中 一直在出錯,大的問題小的問題一直出錯,似乎是不在狀態,但是練習還是要練習的,我並不怕出錯,因為現在還是在學習的階段,問題越多越好吧,但是不希望低 級的錯誤屢次發生,既浪費自己的時間,也毫無意義;好啦,說太多就不高興啦,保持好心情,開始我今天的博客之旅。
一.html頁面
<script src="jquery-1.7.1.min.js"></script> <script> $(function () { $("#name").focus(function () { if ($(this).val() == "請輸入用戶名") { $(this).val(""); } }).blur(function () { if ($(this).val() == "") { $(this).val("請輸入用戶名"); } }) $("#pwd").focus(function () { if ($(this).val() == "請輸入密碼") { $(this).val(""); $(this).attr("type", "password"); } }).blur(function () { if ($(this).val() == "") { $(this).val("請輸入密碼"); } }) $("#address").focus(function () { if ($(this).val() == "請輸入地址") { $(this).val(""); } }).blur(function () { if ($(this).val() == "") { $(this).val("請輸入地址"); } }) })
<body>
<form action="Register.ashx" method="post"> <table> <tr> <td>用戶名:</td><td><input type="text" name="txtname" value="請輸入用戶名" id="name"/></td> </tr> <tr> <td>密碼:</td><td><input type="text" name="txtpwd" value="請輸入密碼" id="pwd"/></td> <!-- <td>密碼:</td><td><input type="search" name="pwd" placeholder="請輸入密碼" /></td>--> </tr> <tr> <td>地址:</td><td><input type="text" name="txtaddress" value="請輸入地址" id="address"/></td> </tr> <tr> <td>性別:</td><td >男:<input type="radio" name="radio" value="男" checked="checked" />女:<input type="radio" name="radio" value="女" /></td> </tr> <tr> <td>郵箱地址:</td><td><input type="email" name="email" value="請輸入郵箱地址 " id="email"/></td> </tr> <tr> <td>出生日期:</td><td><input type="text" name="txtbirthday" value="請輸入出生日期" id="birthday"/></td> </tr> <tr> <td><input type="submit" name="submit" value="注冊" /></td><td><input type="button" name="btnlogin" value="登錄" /></td> </tr> </table> </form> </body>
在寫上面的的html時間,在文本框中實現了當鼠標點擊其文本框則文本框為空,可以填寫其值,當文本框值為空時則仍默認為原來的值,但是密碼框比較特殊,需 要在我們輸入自己設置的密碼時間把type=“text”修改為password即可,我想說的是在jquery中我上面是沒有實現的,但是使用js是可 以實現,或者使用上面密碼框下面注釋的使用其屬性placeholder可以直接實現其功能,這個是在html5中的新屬性。而使用javascript 實現其代碼如下:
document.getElementById("pwd").onfocus = function () { if (this.value == "請輸入密碼") { this.value = ""; this.setAttribute("type","password") } } document.getElementById("pwd").onblur = function () { if (this.value == "") { this.value = "請輸入密碼"; this.setAttribute("type", "text") } }
二.ashx頁面
public class Register : IHttpHandler { PersonBll bll = new PersonBll(); public void ProcessRequest (HttpContext context) { context.Response.ContentType = "text/html"; //文本類型html文檔,當為plain時間為讀取字符串 string path = context.Request.MapPath("002.html"); //獲取路徑 string html = File.ReadAllText(path); //讀取文檔 context.Response.Write(html); //在這里write與flush還是有區別的 string name = context.Request.Form["txtname"]; //獲取用戶注冊輸入的用戶名 string pwd = context.Request.Form["txtpwd"]; //獲取密碼 string address = context.Request.Form["txtaddress"]; //獲取地址 bool sex = context.Request.Form["radio"]=="男"?true:false; //在這里記得使用bool類型,可以使用三元表達式更加的簡單,獲取radio的值,性別 string email = context.Request.Form["email"]; //獲取email地址 string birthday = context.Request.Form["txtbirthday"]; //獲取出生日期 birthday = DateTime.Now.ToString(); //記得在這里給時間類型的值一個初值,否則會在頁面報錯的 if (!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(pwd)) //判斷用戶名和密碼框不為空時間 { PersonModel model=new PersonModel (); //實例化molde,由於是注冊,需要的參數比較多,所以可以傳值 model.Pname = name; //把用戶注冊的信息賦值給model model.Pwd = pwd; model.Paddress = address; model.Pgender = sex; model.Pemail = email; model.Pbirthday = Convert.ToDateTime(birthday); if (bll.RegisterSingle(model)>0) //調用bll層的方法 { context.Response.Clear(); //清除上面的信息 context.Response.Write("歡迎" + model.Pname + "注冊成功"); //相應一個注冊成功的頁面 } } } public bool IsReusable { get { return false; } } }
很遺憾的說,上面在寫sex變量時間,直接定義一個string類型的變量接收了radio的value,后來在這里報錯啦,才想起來它是一個bool類型 的值,最好使用三元表達式最簡單啦,於是改變的,這里也是以后需要注意的地方;另外就是model的實例化賦值,要實例化賦值之后,才判斷調用的bll層 的方法,不可以先調用方法,然后值永遠是為null的,感覺寫這里的代碼就是熟悉的太過熟悉,就沒有想,完全是依靠手動的能力,可是意想不到的是在這里出 錯啦,寫代碼還是要好好的用腦的,嘿嘿,
另外,就是一個初學者經常犯錯的地方,在寫時間類型的變量,需要注意的,在這里想詳細了解的就來這里(http://www.cnblogs.com/wolf-sun/p/4234884.html),嘿嘿,這就是針對初學這的詳細介紹時間類型出錯。
三.三層架構的搭建
public class PersonBll { PersonDal dal = new PersonDal(); public int RegisterSingle(PersonModel model) { return dal.RegisterSingle(model); } }
public class PersonDal { public int RegisterSingle(PersonModel model) { string sql = "insert into dbo.Person(Pname, Pwd, Pgender, Paddress,Pemail, Pbirthday) values(@name,@pwd,@sex,@address,@email,@birthday)"; SqlParameter[] parms= { new SqlParameter("@name",model.Pname), new SqlParameter("@pwd",model.Pwd), new SqlParameter("@sex",model.Pgender), new SqlParameter("@address",model.Paddress), new SqlParameter("@email",model.Pemail), new SqlParameter("@birthday",model.Pbirthday) }; return SQLHelper.ExecuteNonQuery(sql,parms); } }
public static class SQLHelper { private static string connection = ConfigurationManager.ConnectionStrings["sql"].ToString(); public static int ExecuteNonQuery(string sql, params SqlParameter[] parms) { using (SqlConnection conn = new SqlConnection(connection)) { conn.Open(); using (SqlCommand cmd = new SqlCommand(sql, conn)) { cmd.Parameters.AddRange(parms); return cmd.ExecuteNonQuery(); } } } }
public class PersonModel {//Id, Pname, Pwd, Pgender, Paddress, Pbirthday public int Id { set; get; } public string Pname { set; get; } public string Pwd { set; get; } public bool Pgender { set; get; } public string Paddress { set; get; } public string Pemail { set; get; } public DateTime Pbirthday { set; get; } }
在搭建三層架構上面這個還沒有出錯的,感覺只是慶幸吧,不過在這里需要說的是寫sql語句時間要注意的,搭建三層時間是最容易出錯的地方,嘿嘿。
我們實現的html頁面如下所示:
好啦,今天就寫到這吧,感覺今天是這兩個多月來寫程序最沒有狀態的一天,而且還在着急練習,認為寫的很熟悉的一段程序只要寫出來就要出錯,怎么說那,不論怎么樣,心情還是要保持好的哦,嘿嘿,好好睡覺起來又是美好的一天啦,要繼續努力。