首先,后台代码是没有什么错误的,因为都是根据分层实现的,这里一直在锻炼当中,自然也就熟悉了。
接下来总结一下整体自认为学到的新知识。
首页的制作和它与后台的整合中出现的一些实现较为费劲的地方。
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>
<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");
这时就需要把获取到的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>
这是在做网页一直贯穿的问题,图片的加载就要涉及到路径问题。
(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也是提一笔,在以后的学习中应该会有深入讲解吧……