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