首先,后台代码是没有什么错误的,因为都是根据分层实现的,这里一直在锻炼当中,自然也就熟悉了。
接下来总结一下整体自认为学到的新知识。
首页的制作和它与后台的整合中出现的一些实现较为费劲的地方。
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也是提一笔,在以后的学习中应该会有深入讲解吧……