喜歡開源的東西,是以這次也就準備試一試,在前幾期的博文中已經介紹了幾個部落格建站的必備功能的代碼學習過程。這裡就不多陳述了,接下來就直接進入三層的編寫,表現層,業務邏輯層,資料層大家應該很熟悉了吧,如果不清楚這個過程的,百度一下,這裡就不做陳述了。
下面是三層的代碼和邏輯引用。舉一例,使用者資訊的三層代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<code>using</code> <code>System;</code>
<code>using</code> <code>System.Collections.Generic;</code>
<code>using</code> <code>System.Linq;</code>
<code>using</code> <code>System.Text;</code>
<code>namespace</code> <code>Model</code>
<code>{</code>
<code> </code><code>public</code> <code>class</code> <code>L_User</code>
<code> </code><code>{</code>
<code> </code><code>#region 執行個體化使用者&管理者的主要字段</code>
<code> </code><code>public</code> <code>int</code> <code>UID { </code><code>get</code><code>; </code><code>set</code><code>; }</code>
<code> </code><code>public</code> <code>string</code> <code>Author { </code><code>get</code><code>; </code><code>set</code><code>; }</code>
<code> </code><code>public</code> <code>string</code> <code>UUserPwd { </code><code>get</code><code>; </code><code>set</code><code>; }</code>
<code> </code><code>public</code> <code>string</code> <code>UEmail { </code><code>get</code><code>; </code><code>set</code><code>; }</code>
<code> </code><code>public</code> <code>DateTime UCreateTime { </code><code>get</code><code>; </code><code>set</code><code>; }</code>
<code> </code><code>public</code> <code>string</code> <code>UUserRole { </code><code>get</code><code>; </code><code>set</code><code>; }</code>
<code> </code><code>#endregion</code>
<code> </code><code>}</code>
<code>}</code>
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
<code>using</code> <code>Model;</code>
<code>using</code> <code>System.Data.SqlClient;</code>
<code>using</code> <code>System.Data;</code>
<code>namespace</code> <code>DAL</code>
<code> </code><code>public</code> <code>class</code> <code>UserDAL</code>
<code> </code><code>//添加使用者</code>
<code> </code><code>public</code> <code>int</code> <code>AddUser(L_User user)</code>
<code> </code><code>{</code>
<code> </code><code>try</code>
<code> </code><code>{</code>
<code> </code><code>int</code> <code>i = DBHelper.executeSql(</code><code>"insert into L_User(Author,UUserPwd,UEmail,UCreateTime,UUserRole) values(@Author,@UUserPwd,@UEmail,@UCreateTime,@UUserRole)"</code><code>,</code>
<code> </code><code>new</code> <code>SqlParameter(</code><code>"@Author"</code><code>, user.Author), </code><code>new</code> <code>SqlParameter(</code><code>"@UUserPwd"</code><code>, user.UUserPwd),</code>
<code> </code><code>new</code> <code>SqlParameter(</code><code>"@UEmail"</code><code>, user.UEmail), </code><code>new</code> <code>SqlParameter(</code><code>"@UCreateTime"</code><code>, user.UCreateTime),</code>
<code> </code><code>new</code> <code>SqlParameter(</code><code>"@UUserRole"</code><code>, user.UUserRole));</code>
<code> </code><code>return</code> <code>i;</code>
<code> </code><code>}</code>
<code> </code><code>catch</code> <code>(Exception ee)</code>
<code> </code><code>throw</code> <code>new</code> <code>Exception(ee.Message);</code>
<code> </code><code>}</code>
<code> </code><code>//修改user</code>
<code> </code><code>public</code> <code>int</code> <code>UpdateUser(</code><code>int</code> <code>UID, </code><code>string</code> <code>Author, </code><code>string</code> <code>UUserPwd, </code><code>string</code> <code>UEmail, DateTime UCreateTime, </code><code>string</code> <code>UUserRole)</code>
<code> </code><code>int</code> <code>i = DBHelper.executeSql(</code><code>"update L_User set Author=@Author,UUserPwd=@UUserPwd,UEmail=@UEmail, UCreateTime=@UCreateTime,UUserRole=@UUserRole where UID=@UID"</code><code>,</code>
<code> </code><code>new</code> <code>SqlParameter(</code><code>"@UID"</code><code>, UID),</code>
<code> </code><code>new</code> <code>SqlParameter(</code><code>"@Author"</code><code>, Author),</code>
<code> </code><code>new</code> <code>SqlParameter(</code><code>"@UUserPwd"</code><code>, UUserPwd),</code>
<code> </code><code>new</code> <code>SqlParameter(</code><code>"@UEmail"</code><code>, UEmail),</code>
<code> </code><code>new</code> <code>SqlParameter(</code><code>"@UCreateTime"</code><code>, UCreateTime),</code>
<code> </code><code>new</code> <code>SqlParameter(</code><code>"@UUserRole"</code><code>, UUserRole));</code>
<code> </code><code>return</code> <code>i;</code>
<code> </code><code>//删除user</code>
<code> </code><code>public</code> <code>int</code> <code>DeleteUser(</code><code>int</code> <code>UID)</code>
<code> </code><code>int</code> <code>i = DBHelper.executeSql(</code><code>"delete from L_User where UID=@UID "</code><code>, </code><code>new</code> <code>SqlParameter(</code><code>"@UID"</code><code>, UID));</code>
<code> </code><code>//單獨的一條user資訊</code>
<code> </code><code>public</code> <code>L_User get_singleUser(</code><code>int</code> <code>UID)</code>
<code> </code><code>DataSet ds = DBHelper.dataset(</code><code>"select * from L_User where UID=@UID "</code><code>, </code><code>new</code> <code>SqlParameter(</code><code>"@UID"</code><code>, UID));</code>
<code> </code><code>L_User lu = </code><code>new</code> <code>L_User();</code>
<code> </code><code>if</code> <code>(ds != </code><code>null</code><code>)</code>
<code> </code><code>lu.UID = Convert.ToInt32(ds.Tables[0].Rows[0][</code><code>"UID"</code><code>].ToString());</code>
<code> </code><code>lu.Author = ds.Tables[0].Rows[0][</code><code>"Author"</code><code>].ToString();</code>
<code> </code><code>lu.UUserPwd = ds.Tables[0].Rows[0][</code><code>"UUserPwd"</code><code>].ToString();</code>
<code> </code><code>lu.UEmail = ds.Tables[0].Rows[0][</code><code>"UEmail"</code><code>].ToString();</code>
<code> </code><code>lu.UCreateTime = Convert.ToDateTime(ds.Tables[0].Rows[0][</code><code>"UCreateTime"</code><code>].ToString());</code>
<code> </code><code>lu.UUserRole = ds.Tables[0].Rows[0][</code><code>"UUserRole"</code><code>].ToString();</code>
<code> </code><code>return</code> <code>lu;</code>
<code> </code><code>else</code>
<code> </code><code>return</code> <code>null</code><code>;</code>
<code> </code><code>//單獨的一條user資訊2</code>
<code> </code><code>public</code> <code>L_User get_singleUser(</code><code>string</code> <code>name)</code>
<code> </code><code>DataSet ds = DBHelper.dataset(</code><code>"select * from L_User where Author=@Author "</code><code>, </code><code>new</code> <code>SqlParameter(</code><code>"@Author"</code><code>, name));</code>
<code> </code><code>if</code> <code>(ds != </code><code>null</code> <code>&& ds.Tables[0].Rows.Count > 0)</code>
<code> </code><code>// 擷取所有使用者的清單資訊</code>
<code> </code><code>public</code> <code>DataSet GetUserGroupList2(</code><code>string</code> <code>sqlstr)</code>
<code> </code><code>string</code> <code>cmdText = </code><code>"select * from L_User where 1=1 "</code><code>;</code>
<code> </code><code>if</code> <code>(sqlstr != </code><code>""</code><code>)</code>
<code> </code><code>cmdText += sqlstr;</code>
<code> </code><code>return</code> <code>DBHelper.getDataSet(cmdText);</code>
<code> </code><code>//修改密碼</code>
<code> </code><code>public</code> <code>int</code> <code>UpdateUS(</code><code>string</code> <code>UUserPwd)</code>
<code> </code><code>int</code> <code>i = DBHelper.executeSql(</code><code>@" update L_User set UUserPwd=@UUserPwd ;"</code><code>, </code><code>new</code> <code>SqlParameter(</code><code>"@UUserPwd"</code><code>, UUserPwd));</code>
<code> </code><code>//檢查登入(此方法有誤)</code>
<code> </code><code>public</code> <code>int</code> <code>CheckLogin(</code><code>string</code> <code>Author, </code><code>string</code> <code>UUserPwd)</code>
<code> </code><code>int</code> <code>i = Convert.ToInt32(DBHelper.executeScalar(</code><code>"select count(*) from L_User where Author=@Author and UUserPwd=@UUserPwd "</code><code>, </code><code>new</code> <code>SqlParameter(</code><code>"@Author"</code><code>, Author), </code><code>new</code> <code>SqlParameter(</code><code>"@UUserPwd"</code><code>, UUserPwd)));</code>
<code> </code><code>//驗證使用者的角色</code>
<code> </code><code>public</code> <code>L_User checkAuthor(</code><code>string</code> <code>Author)</code>
<code> </code><code>DataSet ds = DBHelper.dataset(</code><code>"select * from L_User where Author=@Author "</code><code>, </code><code>new</code> <code>SqlParameter(</code><code>"@Author"</code><code>, Author));</code>
<code> </code><code>L_User LU = </code><code>new</code> <code>L_User();</code>
<code> </code><code>LU.UUserRole = ds.Tables[0].Rows[0][</code><code>"UUserRole"</code><code>].ToString();</code>
<code> </code><code>return</code> <code>LU;</code>
<code> </code><code>//驗證使用者是否相同</code>
<code> </code><code>public</code> <code>int</code> <code>CheckUser(</code><code>string</code> <code>Author)</code>
<code> </code><code>int</code> <code>i = Convert.ToInt32(DBHelper.executeScalar(</code><code>"select count(*) from L_User where Author=@Author"</code><code>, </code><code>new</code> <code>SqlParameter(</code><code>"@Author"</code><code>, Author)));</code>
<code> </code><code>//驗證舊密碼是否相同</code>
<code> </code><code>public</code> <code>L_User Checkjiu(</code><code>string</code> <code>Author)</code>
<code> </code><code>L_User LU = </code><code>new</code> <code>L_User();</code>
<code> </code><code>LU.UUserPwd = ds.Tables[0].Rows[0][</code><code>"UUserPwd"</code><code>].ToString();</code>
<code> </code><code>return</code> <code>LU;</code>
<code>using</code> <code>DAL;</code>
<code>namespace</code> <code>BLL</code>
<code> </code><code>public</code> <code>class</code> <code>UserService</code>
<code> </code><code>/// <summary></code>
<code> </code><code>/// 添加使用者</code>
<code> </code><code>/// </summary></code>
<code> </code><code>/// <param name="user"></param></code>
<code> </code><code>/// <returns></returns></code>
<code> </code><code>UserDAL userDal = </code><code>new</code> <code>UserDAL();</code>
<code> </code><code>return</code> <code>userDal.AddUser(user);</code>
<code> </code><code>/// 修改user</code>
<code> </code><code>/// <param name="UID"></param></code>
<code> </code><code>/// <param name="BlogTiltle"></param></code>
<code> </code><code>/// <param name="BlogContent"></param></code>
<code> </code><code>/// <param name="CreateTime"></param></code>
<code> </code><code>/// <param name="Recommand"></param></code>
<code> </code><code>UserDAL uDAL = </code><code>new</code> <code>UserDAL();</code>
<code> </code><code>return</code> <code>uDAL.UpdateUser(UID, Author, UUserPwd, UEmail, UCreateTime, UUserRole);</code>
<code> </code><code>/// 删除user</code>
<code> </code><code>/// <param name="ID"></param></code>
<code> </code><code>return</code> <code>uDAL.DeleteUser(UID);</code>
<code> </code><code>/// 擷取所有使用者的資訊清單</code>
<code> </code><code>UserDAL ugDAL = </code><code>new</code> <code>UserDAL();</code>
<code> </code><code>return</code> <code>ugDAL.GetUserGroupList2(sqlstr);</code>
<code> </code><code>/// 單獨的一條使用者資訊</code>
<code> </code><code>return</code> <code>uDAL.get_singleUser(UID);</code>
<code> </code><code>/// 查找login使用者名,實作登入的安全驗證</code>
<code> </code><code>/// <param name="name"></param></code>
<code> </code><code>public</code> <code>L_User get_singleUser(</code><code>string</code> <code>name)</code>
<code> </code><code>return</code> <code>uDAL.get_singleUser(name);</code>
<code> </code><code>/// 修改密碼</code>
<code> </code><code>/// <param name="AUserPwd"></param></code>
<code> </code><code>return</code> <code>uDAL.UpdateUS(UUserPwd);</code>
<code> </code><code>/// 檢查登入(此方法有誤)</code>
<code> </code><code>/// <param name="Author"></param></code>
<code> </code><code>/// <param name="UUserPwd"></param></code>
<code> </code><code>/// <param name="UUserRole"></param></code>
<code> </code><code>return</code> <code>userDal.CheckLogin(Author, UUserPwd);</code>
<code> </code><code>/// 檢查使用者權限</code>
<code> </code><code>return</code> <code>userDal.checkAuthor(Author);</code>
<code> </code><code>/// 檢查使用者名</code>
<code> </code><code>/// <param name="LoginName"></param></code>
<code> </code><code>return</code> <code>userDal.CheckUser(Author);</code>
<code> </code><code>/// 驗證舊密碼是否相同</code>
<code> </code><code>return</code> <code>uDAL.Checkjiu(Author);</code>
接下來我們就可以開始在web頁面cs中開始我們的功能調用了,實作編輯功能的一部分代碼如下,PS:驗證input的
話建議大家多寫一些,JS在前台,本頁面的驗證,以及伺服器端的驗證,保證資訊的安全性,養成好習慣。
<code>protected</code> <code>void</code> <code>ImageButton1_Click(</code><code>object</code> <code>sender, ImageClickEventArgs e)</code>
<code> </code><code>if</code><code>(TextBox1.Text.Trim().ToString() ==</code><code>""</code><code>)</code>
<code> </code><code>lblMessage.Text = </code><code>"<font color=\"red\" size=\"2\">請輸入使用者名</font>"</code><code>;</code>
<code> </code><code>NormalMethod.Show(</code><code>this</code><code>, </code><code>"請完整填寫使用者的資訊"</code><code>);</code>
<code> </code><code>return</code><code>;</code>
<code> </code><code>if</code> <code>(pwd.Text.Trim().ToString() == </code><code>""</code><code>)</code>
<code> </code><code>lblMessage.Text = </code><code>"<font color=\"red\" size=\"2\">請輸入使用者密碼</font>"</code><code>;</code>
<code> </code><code>if</code> <code>(TextBox3.Text.Trim().ToString() == </code><code>""</code><code>)</code>
<code> </code><code>lblMessage.Text = </code><code>"<font color=\"red\" size=\"2\">請輸入使用者郵箱</font>"</code><code>;</code>
<code> </code><code>if</code> <code>(ddlGroup.SelectedIndex == 0)</code>
<code> </code><code>lblMessage.Text = </code><code>"<font color=\"red\" size=\"2\">請輸入使用者組</font>"</code><code>;</code>
<code> </code><code>if</code> <code>(my97.Value.ToString() == </code><code>""</code><code>)</code>
<code> </code><code>lblMessage.Text = </code><code>"<font color=\"red\" size=\"2\">請輸入正确的日期格式</font>"</code><code>;</code>
<code> </code><code>UserService uService = </code><code>new</code> <code>UserService();</code>
<code> </code><code>if</code> <code>(editor == </code><code>"edit"</code><code>)</code>
<code> </code><code>int</code> <code>i = uService.UpdateUser(Convert.ToInt32(Session[</code><code>"UID"</code><code>].ToString()), TextBox1.Text.ToString(), pwd.Text.ToString(), TextBox3.Text.ToString(), DateTime.Now, ddlGroup.Text.ToString());</code>
<code> </code><code>if</code> <code>(i > 0)</code>
<code> </code><code>{</code>
<code> </code><code>NormalMethod.ShowAndRedirect(</code><code>this</code><code>, </code><code>"修改成功!(*^__^*)"</code><code>, </code><code>"UserGuan.aspx"</code><code>);</code>
<code> </code><code>editor = </code><code>null</code><code>;</code>
<code> </code><code>}</code>
<code> </code><code>else</code>
<code> </code><code>NormalMethod.ShowAndRedirect(</code><code>this</code><code>, </code><code>"修改失敗!#(┬_┬)我的錯,我改還不行嗎?"</code><code>, </code><code>"UserGuan.aspx"</code><code>);</code>
<code> </code><code>TextBox1.ReadOnly = </code><code>false</code><code>;</code>
<code> </code><code>TextBox3.ReadOnly = </code><code>false</code><code>;</code>
<code> </code><code>my97.Visible = </code><code>true</code><code>;</code>
<code> </code><code>L_User lu = </code><code>new</code> <code>L_User();</code>
<code> </code><code>lu.Author = TextBox1.Text.ToString();</code>
<code> </code><code>lu.UUserPwd = pwd.Text.ToString();</code>
<code> </code><code>lu.UEmail = TextBox3.Text.ToString();</code>
<code> </code><code>lu.UUserRole = ddlGroup.SelectedValue.ToString();</code>
<code> </code><code>lu.UCreateTime =Convert.ToDateTime(my97.Value.ToString());</code>
<code> </code><code>int</code> <code>j = uService.AddUser(lu);</code>
<code> </code><code>if</code> <code>(j > 0)</code>
<code> </code><code>NormalMethod.ShowAndRedirect(</code><code>this</code><code>, </code><code>"添加成功!(*^__^*)"</code><code>, </code><code>"UserGuan.aspx"</code><code>);</code>
<code> </code><code>TextBox1.Text = </code><code>""</code><code>;</code>
<code> </code><code>TextBox3.Text = </code><code>""</code><code>;</code>
<code> </code><code>my97.Value = </code><code>""</code><code>;</code>
<code> </code><code>pwd.Text = </code><code>""</code><code>;</code>
<code> </code><code>NormalMethod.ShowAndRedirect(</code><code>this</code><code>, </code><code>"添加失敗!#(┬_┬)我的錯,我改還不行嗎?"</code><code>, </code><code>"UserGuan.aspx"</code><code>);</code>
緊接着就是設計其他的網頁所需的業務邏輯功能,如圖,
<a target="_blank" href="http://blog.51cto.com/attachment/201308/024101984.jpg"></a>
背景的四操作把類庫的功能都寫好後就可以很容易的處理前台的問題了。這裡的前台我是用了XML和Repeater的綁定方式。
Repeater的綁定:
<a target="_blank" href="http://blog.51cto.com/attachment/201308/024338389.jpg"></a>
代碼如下:
<code><asp:Repeater ID=</code><code>"BlogList"</code> <code>runat=</code><code>"server"</code><code>></code>
<code> </code><code><ItemTemplate></code>
<code> </code><code><div </code><code>class</code><code>=</code><code>"title"</code><code>></code>
<code> </code><code><a href=</code><code>'BlogShow.aspx?ID=<%# Eval("ID") %>'</code>
<code>title=</code><code>'<%# Eval("BlogTiltle") %>'</code><code>></code>
<code> </code><code><%# Eval(</code><code>"BlogTiltle"</code><code>)%></a></code>
<code> </code><code></div></code>
<code> </code><code><div></code>
<code> </code><code><p style=</code><code>"color:Gray"</code><code>></code>
<code> </code><code><%#BLL.SystemTools.FixLengthString</code>
<code>(BLL.SystemTools.NoHTML(Eval(</code><code>"BlogContent"</code><code>).ToString()),300)%>...</code>
<code> </code><code><a href=</code><code>'BlogShow.aspx?ID=<%# Eval("ID") %>'</code><code>>[檢視全文]</a></code>
<code> </code><code></p></code>
<code> </code>
<code> </code>
<code> </code><code><span style=</code><code>"font-size: small; color: Gray"</code><code>></code>
<code>浏覽(<%# Eval(</code><code>"Click"</code><code>) %>)</code>
<code> </code><code>&nbsp; &nbsp;|&nbsp; &nbsp;釋出時間:</code>
<code><%# Eval(</code><code>"CreateTime"</code><code>)%></span><br /><hr style=</code><code>"border: 0.5px Dotted gray"</code> <code>/></code>
<code> </code><code></ItemTemplate></code>
<code> </code><code></asp:Repeater></code>
<code> </code>
<code> </code><code><a href=</code><code>"bowenList.aspx"</code><code>>檢視全部博文>></a></code>
cs:
<code>protected</code> <code>void</code> <code>Page_Load(</code><code>object</code> <code>sender, EventArgs e)</code>
<code> </code><code>if</code> <code>(!IsPostBack)</code>
<code> </code><code>bindRepeater();</code>
<code> </code><code>//綁定Repeater的内容</code>
<code> </code><code>protected</code> <code>void</code> <code>bindRepeater()</code>
<code> </code><code>BlogService blogService = </code><code>new</code> <code>BlogService();</code>
<code> </code><code>BlogList.DataSource = blogService.getData();</code>
<code> </code><code>BlogList.DataBind();</code>
接着就是顯示博文的界面了:
<a target="_blank" href="http://blog.51cto.com/attachment/201308/024850990.jpg"></a>
<a target="_blank" href="http://blog.51cto.com/attachment/201308/024850933.jpg"></a>
3D gallery:
<a target="_blank" href="http://blog.51cto.com/attachment/201308/025636713.jpg"></a>
童話輪播:
<a target="_blank" href="http://blog.51cto.com/attachment/201308/030133847.jpg"></a>
還有最簡單的輪播:
<a target="_blank" href="http://blog.51cto.com/attachment/201308/030319284.jpg"></a>
講到這裡基本上前台要做的就差不多了,對了忘說了,最後我想了想,由于是部落格,是以就加了一個播放器,和XML很好的結合,實作了四操作和播放歌曲的功能,效果圖和代碼如下,
<a target="_blank" href="http://blog.51cto.com/attachment/201308/030553952.jpg"></a>
<a href="http://blog.51cto.com/liangxiao/1270595"></a>
<code><</code><code>object</code> <code>type=</code><code>"application/x-shockwave-flash"</code>
<code>data="http:</code><code>//service.weibo.com/staticjs/weiboshow.swf?verifier=b92d5ce3&amp;uid=1624424711&amp;</code>
<code>width=230&amp;height=500&amp;fansRow=2&amp;isTitle=1&amp;</code>
<code>isWeibo=1&amp;isFans=1&amp;noborder=0&amp;ptype=1&amp;</code>
<code>colors=cfe1f3,fafcff,444444,5093d5"</code>
<code>width=</code><code>"230"</code> <code>height=</code><code>"500"</code> <code>id=</code><code>"pre_flash"</code> <code>style=</code><code>"visibility: visible;"</code><code>></code>
<code> </code><code><param name=</code><code>"wmode"</code> <code>value=</code><code>"transparent"</code><code>/></code>
<code> </code><code><param name=</code><code>"quality"</code> <code>value=</code><code>"high"</code><code>/></code>
<code> </code><code><param name=</code><code>"bgcolor"</code> <code>value=</code><code>"#FFFFFF"</code><code>/></code>
<code> </code><code><param name=</code><code>"align"</code> <code>value=</code><code>"L"</code><code>/></code>
<code> </code><code><param name=</code><code>"scale"</code> <code>value=</code><code>"noborder"</code><code>/></code>
<code> </code><code><param name=</code><code>"allowScriptAccess"</code> <code>value=</code><code>"sameDomain"</code><code>/></code>
<code></</code><code>object</code><code>></code>
到這裡前台的大體功能基本上就差不多了,下面的一些技術我分三期講吧,有點多,已經三點了,大家明天先看着,我會繼續更新,有時間的話。謝謝大家的支援!謝謝莉子姐,米米姐,蘑菇姐,和5CTO一起成長!加油!
本文轉自 吳雨聲 51CTO部落格,原文連結:http://blog.51cto.com/liangxiao/1270595,如需轉載請自行聯系原作者