首先,后臺代碼是沒有什么錯誤的,因為都是根據分層實現的,這里一直在鍛煉當中,自然也就熟悉了。
接下來總結一下整體自認為學到的新知識。
首頁的制作和它與后臺的整合中出現的一些實現較為費勁的地方。
1、制作母版頁
為了減少在網頁設計時出現的變一頁而懂全站的問題,我們使用了母版頁,這樣,就不必每個頁面都去更新,修改一次,所有的網頁都會改變,做到了一勞永逸。例如在牛腩新聞發布系統中前臺頁面畫紅線的地方。
這樣就不存在代碼冗余,牽一發而動全身的現象了。
2、表格
(1)Repeater:不會生成多余的代碼
在項模板中直接寫上需要重復的語句,界面控件綁定D層查詢到的DataTable里的數據。
<span style="font-size:14px;"> <asp:Repeater ID="repCategory" runat="server">
<ItemTemplate > <%--項模板-- %>
<li><a href ='list.aspx?caid=<%# Eval("id") %>'><%# Eval("name") %></a></li>
</ItemTemplate>
</asp:Repeater> </span>
(2)GridView:這是一個功能最強大的table控件,但是靈活性最差,會生成很多的多余代碼。
這是綁定熱點新聞使用的GridView控件
<span style="font-size:18px;"> </span><span style="font-size:14px;"><!--熱點新聞-->
<div id="hotnews" class ="commonfrm">
<h4 >熱點新聞</h4>
<asp:GridView ID="gvHotNews" runat="server" AutoGenerateColumns ="False" BorderWidth ="0" GridLines="None" >
<Columns>
<asp:TemplateField HeaderText="所屬類別" HeaderStyle-CssClass ="th_category " >
<ItemTemplate>
<a class ="td_category " href ='list.aspx?caid=<%#Eval("caId") %>'>[<%# Eval("name") %>]</a>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="新聞標題">
<ItemTemplate>
<a href ='contentnews.aspx?newsid=<%#Eval ("id") %>' target ="_blank" title ='<%# Eval("title") %>' ><%# StringTruncat(Eval("title").ToString(),18,"...") %></a>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="發布時間" HeaderStyle-CssClass ="th_time " ItemStyle-CssClass ="td_time ">
<ItemTemplate>
<asp:Label ID="Label3" runat="server" Text='<%# Bind("createtime") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView></span>
擴展:
GridView、DataList、Repeater控件使用
GridView是很智能的,直接就提供了很多的表現方式,是三者中最復雜也是最占資源的一個,常用于列表數據處理的時候,但是最好是不要太大量的數據;
Datalist:實現重復項顯示的功能,里面的內容自定義程度高,有點類似于在SAP中寫循環語句來實現自動生成數據列表,是線性的處理。直接輸出;數據量很大的時候可以考慮用這個。
Repeater:介于兩者之間。
其實,使用哪個控件要根據實際情況、數據量的大小、所占的內存而定,當然我們所做的程序要是內存小、功能強大的方向努力,所以在選擇控件的時候要慎重。
3、.NET截取指定長度漢字超出部分以“...”代替
這個是在新聞列表頁的時候,當表格中新聞標題太長時,在一定的空間內是不可能完全顯示的,但是又想著當鼠標移上去的時候可以全部顯示出來,這樣就用到了這個截取指定長度超出部分。然后鼠標移上去又全部顯示。
首先,截取指定長度漢字。
<span style="font-size:14px;"> /// <summary>
/// 將指定字符串按指定長度進行剪切
/// </summary>
/// <param name="oldStr">需要截斷的字符串</param>
/// <param name="maxLength">字符串的最大長度</param>
/// <param name="endWith">超過長度的后綴</param>
/// <returns>如果超過長度,返回截斷后的新字符串加上后綴,否則,返回原字符串</returns>
public static string StringTruncat(string oldStr, int maxLength, string endWith)
{
if (string.IsNullOrEmpty(oldStr)) //原字符創不能為空
return oldStr + endWith;
if (maxLength < 1)
throw new Exception("返回的字符串長度必須大于【0】");
if (oldStr.Length > maxLength)
{
string strTmp = oldStr.Substring(0, maxLength);
if (string.IsNullOrEmpty(endWith))
return strTmp;
else
return strTmp + endWith;
}
return oldStr;
}</span><span style="background-color: rgb(255, 255, 255); font-family: Arial, Helvetica, sans-serif;"> </span>
<a>標簽中間是截取漢字的使用
<span style="font-size:14px;"><a href ='contentnews.aspx?newsid=<%#Eval("id") %>' target ="_blank" ><%# StringTruncat(Eval("title").ToString(),18,"...") %></a></span>
在<a>標簽中的title屬性設置鼠標移上去后,長度等于沒有截取之前的新聞標題
<span style="font-size:14px;"><a href ='contentnews.aspx?newsid=<%#Eval("id") %>' target ="_blank" title ='<%# Eval("title") %>' ><%# StringTruncat(Eval("title").ToString(),18,"...") %></a></span>
4、.NET中獲取字符串的MD5碼
登錄頁面,需要輸入密碼,但是
(1)導入命名空間
using System.Web.Security;
(2)獲取MD5碼
pwd = FormsAuthentication.HashPasswordForStoringInConfigFile(pwd, "MD5");
(3)同時需要寫一個登錄邏輯
這時就需要把獲取到的MD5代碼轉換成我們熟知的密碼
if ("niunan" == name && "E10ADC3949BA59ABBE56E057F20F883E" == pwd)
{
flag = true;
}
return flag;
5、Bind和Eval的區別
綁定表達式
<span style="font-size:14px;"><%# Eval("字段名") %>
<%# Bind("字段名") %></span>
區別:
1、Eval是只讀數據,Bind是可更新的。
2、當對此表達式操作時候,必須用Eval,如,<%# Eval("字段名").ToString().Trim() %>
3、若GridView中綁定列里面,設置內容格式DataFormateString={0:d},則必須把屬性HtmlCode設置為false,否則無法起作用。
Eval 單向綁定:數據是只讀的
Bind:雙向綁定:數據可以更改,并返回服務器端,服務器可以處理更改后的數據,如存入數據庫。
6、有關Session
Session是指一個終端用戶與交互系統進行通信的時間間隔,通常指從注冊進入系統到注銷退出系統之間所經過的時間。
在Web中,Session指的是用戶在瀏覽某個網站時,從進入網站到瀏覽器關閉所經過的這段時間,也就是用戶瀏覽這個網站所花費的時間。
當一個Session第一次被啟用時,一個唯一額標識被存儲于本地的cookie中。
存儲需要在整個用戶會話過程中保持其狀態的信息,例如登錄信息或用戶瀏覽Web應用程序是需要的其他信息。Session的作用就是它在Web服務器上保持用戶的狀態信息供任何時間從任何頁訪問。因為瀏覽器不需要存儲任何這種信息,所以可以使用任何李蘭器。
這是我們可以通過取得Session里的值來判斷登錄條件。如:判斷登錄用戶是否為niunan
<span style="font-size:14px;">if (Session["admin"] !=null && Session["admin"].ToString() == "niunan")
{//管理員已登陸
if (!Page .IsPostBack )
{
}
}</span>
7、路徑問題
這是在做網頁一直貫穿的問題,圖片的加載就要涉及到路徑問題。
(1)相對路徑
當前所在目錄:""
<span style="font-size:14px;"><img src="niunanlogo.jpg" />或
<img src="./niunanlogo.jpg" /></span>
上一級目錄:"../"
<span style="font-size:14px;"><img src="../images/niunanlogo.jpg" alt ="LOGO" class ="login_logo" /></span>
上一級的上一級:"../../"
<span style="font-size:14px;"><img src="../../images/niunanlogo.jpg" alt ="LOGO" class ="login_logo" /></span>
(2)絕對路徑
絕對路徑就是具體的磁盤位置等。例如:
E:\新聞發布系統\Web\Web\images\niunanlogo.jpg
8、一般處理程序生成驗證碼
在一般處理程序中,先隨機的生成幾個符號作為驗證碼,然后再轉換成網頁圖片形式顯示出來。具體見牛老師博客。這個地方出現了一些小問題。隨著驗證碼的驗證成功,新聞發布系統也算告一段落了。具體在發布時出現的問題將繼續記錄下來……
重新瀏覽了一次筆記,認為比較重要的,就羅列了出來,在整個新聞發布系統中,使用到的控件每個都是點到為止,用到了JavaScript也是提一筆,在以后的學習中應該會有深入講解吧……