2004-6-22+ 用vs.net做的留言板

--->完整的留言板下载<-------------

有些事情就是想起来容易,做起来难。这个留言板也是这样的,不过总算是做完啦~~我把主要的思路和遇到的问题写在下面,具体的代码就不给了,有需要的可以把上面的东东下载下来慢慢的看。我不敢保证这个留言板有最佳的性能。
1.关于gbook.aspx.cs中的Page.IsPostBack的判断。
private void Page_Load(object sender, System.EventArgs e)
{
   //这个判断!Page.IsPostBack很重要的啊,在文章里有详细的说明
   if(!Page.IsPostBack)
   {
   SetData();
   }
}

这个地方着实让我难受了好一阵子,因为一开始没有加这个判断的时候,回复内容是不能添加到数据库里面的。原因就在于asp.net的页面执行流程的特殊性。我们填好回复内容后,点击提交按钮,接下面的过程是先执行Page_Load事件,然后再执行添加回复的事件listgbook_UpdateCommand,这样如果不加对Page.IsPostBack的判断的话,原先填到回复框里的内容因为SetData()而被重新设置。
关于页面流程的具体说明,可以查看本站“转载精华”里的“ASP.NET Web 页面生命中的一天”一文,或者查看.net framework sdk 文档,地址为ms-help://MS.NETFrameworkSDKv1.1.CHS/cpguidenf/html/cpconcontrolexecutionlifecycle.htm

2. 控件的样式设定。
留言显示部分为一个datalist控件,这里面又是有很多的label等其他控件构成。在控制文字显示等方面,必须要分别对每一个控件进行设定,而并不是说只是设定了datalist的就可以,因为这个没有继承关系。

3.页面的构成。
大家都看到了,vs.net对页面的布局控制可以说是完全无能为力。这个留言板在做的时候,就是采用了通用的dreamweaver2004+visual studio .net模式。我在做的时候是先用dw把留言板的框架做出来,然后在把代码复制到vs.net中,最后在往里面插入web控件。其中datalist的各种模板在做的时候比较费劲。先要在dw中分好段,即在里面表示出哪一部分是HeaderTemplate、FooterTemplate、ItemTemplate等,然后在分别把代码复制到相应的区域。EditItemTemplate在做的时候就没有这么麻烦了,因为是在后面只有自己可以看到,所以就用了<br>来分隔。

4. listgbook_ItemCommand
这个单独列出来,是因为用这个来响应datalist里的按钮事件确实比较方便。
//这个就是用了不同的commandname来进行操作
private void listgbook_ItemCommand(object source, System.Web.UI.WebControls.DataListCommandEventArgs e)
{
   if(e.CommandName=="login")
   {
     login(source,e);
   }
   if(e.CommandName=="quit")
   {
     quit();
   }
   if(e.CommandName=="up")
   {
     up(source,e);
   }
   if(e.CommandName=="down")
   {
     down(source,e);
   }
}

关于ItemCommand的详细说明,可以查看本专题第16篇文章“使用DataList吧”。

5.session值的判断。
Session是对象,因此要判断它的值的时候,必须要先判断是否为空,然后才可以进行值的判断。
//在datalist进行数据绑定前检查session的值,然后据此进行admin区域的显示
if((e.Item.ItemType==ListItemType.Item)||(e.Item.ItemType==ListItemType.AlternatingItem))
{
   Panel panadmin=(Panel)e.Item.FindControl("panadmin");
   if(Session["login"]!=null)
   {
     if(Session["login"].ToString()=="red")
     {
       panadmin.Visible=true;
     }
   }
   else
   {
   panadmin.Visible=false;
   }
}

如果一上来直接检查Session["login"]的值,会出错。

6.分页。
分页还是用的以前的pagingmachine,不明白的可以看本专题第13篇文章“用c#写的类‘数据分页器’”。

7.对浏览器的内容进行检查。
这个是asp.net自动进行的,如果留言或回复提交的内容中含有不安全的因素,将会出现HttpRequestValidationException 异常。比如说当你想把一个html元素提交到数据库的时候就会出现这个。可以通过web.config文件的pages配置节的validateRequest设置。

8.数据库连接路径。
数据库的连接语句是放在web.config文件里的,里面的路径是完整的物理路径。记得要该成自己机器的路径。
9. 子文件夹的设置。
一个asp.net程序应该就是一个单独配置的虚拟目录,所以这些文件都应该放到根目录下才可以。如果要放到这个目录下面的一个子文件夹里,就应该修改.cs文件里的namespace。
//注意namespace的套嵌关系
namespace guest.aspx
10.bin文件夹的位置。
这个文件夹一定要放到根目录下。

8/9/10这三个问题在自己的机器上时可能感觉不到,一旦你想把这个留言板放到网上的服务器,那麻烦就来了,或许你会一直接到application error的错误。

大体的问题就这么多了吧,这是我第一次写完整的asp.net程序,希望大家可以多多指教!

你可能感兴趣的:(.net)