<<<返回

新项目处理页
当用户发表完一个新消息后，就进入了新项目处理页，这个页面看上去很简单，但是处理工作最为复杂。 这个页面动态生成新的Active Server Pages文件，（天那，你知道这意味着什么?!） 当用户发表了新的消息，那么这个消息就存在一个文本文件中，不过，这里面的文本文件不是一般意义的纯文本，而是Active Server Pages文件。这个新的项目的 依据的信息就是从HTML的FORM中接受到的。 同时该asp文件也将内容连接组件所依据的文本文件进行更新，主要是为新的消息创建一个对应的记录。因此达到动态的即时更新的效果。
下面的例子脚本明显比以前的长，当然，对于专业制作人士，这其实算不上什么。不过现在作为教程，我们会对每一部分详细解释。
例20.3新项目处理页
<%
‘创建这个发表内容
TheSubj=Server.HTMLEncode(“Request.Form(“subject”))
If TheSubj =”” THEN TheSubj=”无标题”
ThePost=”<HTML><HEAD><TITLE>”&TheSubj&”</TITLE></HEAD><BODY>”
ThePost=ThePost&”发表日期：”&NOW&”<Hr>”
ThePost=ThePost&Server.HTMLEncode(“Request.Form(“Posting”))
ThePost=ThePost&”<!-- #INCLUDE VIRTUAL=””new.inc”” -->”
ThePost=ThePost&”</BODY></HTML>”
‘创建一个新的文件名（不重名）
Set mylinks=Server.CreateObject(“MSWC.NextLink”)
TheName=”item”&mylinks.GetlistCount(“news.txt”)+1&”.asp”
TheNamePath=Server.Mypath(TheName)
‘保存该发表内容到文件中
Set MyFileObj=Server.CreateObject(“Scripting.FileSystemObject”)
Set MyOutStream=MyFileObj.CreatTextFile(TheNamePath)
MyOutStream.Write ThePost
MyOutStream.Close
‘对内容连接组件所需文本文件的更新
TheNews=Server.MyPath(”news.txt”)
Set MyNews=MyFileObj.OpenTextFile(TheNews,8,TRUE)
MyNews.WriteLine TheName&vbTab&TheSubj
MyNews.Close
%>
<HTML>
<HEAD><TITLE>新的项目</TITLE></HEAD>
<BODY>
<h2>谢谢发表文章</h2>
<a href=”news.asp”>返回主页</a>
</Body>
</HTML>
在本页中，创建了一个叫做ThePost的变量用来记载这个Active Server Page的内容， 在这里面，整个Active Server Page作为一个很长的字符串来处理，下面仔细看一下 这个字符串的生成过程：
‘创建这个发表内容
TheSubj=Server.HTMLEncode(“Request.Form(“subject”))
If TheSubj =”” THEN TheSubj=”无标题”
ThePost=”<HTML><HEAD><TITLE>”&TheSubj&”</TITLE></HEAD><BODY>”
ThePost=ThePost&”发表日期：”&NOW&”<Hr>”
ThePost=ThePost&Server.HTMLEncode(“Request.Form(“Posting”))
ThePost=ThePost&”<!-- #INCLUDE VIRTUAL=””new.inc”” -->”
ThePost=ThePost&”</BODY></HTML>”
这个Active Server Page文件不仅包括了Form中传递过来的信息，还包括了日期信息 以及News.inc的一段用于动态显示的脚本。
注：对于引号在字符串中的赋值是采用连着两遍的引号输入来进行的，即，在字串赋值中两个连着的引号相当于一个引号。例如，将MyString赋值为下面这个字段
我说:”你好”
那么赋值语句为MyString=”我说:””你好”””
不过，对于中文输入法的双字节引号，不需要这样处理。
脚本的下一部分是给这个active Server Page起一个不重复的名字，你当然不希望新 的消息覆盖以前的，因此在存储该文件之前必须首先进行不重复的文件名的生成：再看这段脚本：
‘创建一个新的文件名（不重名）
Set mylinks=Server.CreateObject(“MSWC.NextLink”)
TheName=”item”&mylinks.GetlistCount(“news.txt”)+1&”.asp”
TheNamePath=Server.Mypath(TheName)
由于使用了内容连接组件的Count属性，就可以通过从文本文件中的记录数目来命名以保证不会有重复了，这里文件名分别为item1.asp,item2.asp,item3.asp等等，每一个信息对应一个不同的名称，不过，提醒注意的是，如果从news.txt中删除了一些信息，那么文件命名重复的现象就会发生，因为这只是简单示例，所以没有做这些考虑处理。
第三部分脚本是将将生成的ThsPost字符串以生成的TheNamePath路径名存入硬盘，这里面显然用到了FileSystemObject()方法来进行处理，那么详细的这种处理的介绍参见上一章。脚本如下：
‘保存该发表内容到文件中
Set MyFileObj=Server.CreateObject(“Scripting.FileSystemObject”)
Set MyOutStream=MyFileObj.CreatTextFile(TheNamePath)
MyOutStream.Write ThePost
MyOutStream.Close
最后部分是更新News.txt文件，该文件被内容连接组件用来检索信息，下面是这个更新部分的脚本：
‘对内容连接组件所需文本文件的更新
TheNews=Server.MyPath(”news.txt”)
Set MyNews=MyFileObj.OpenTextFile(TheNews,8,TRUE)
MyNews.WriteLine TheName&vbTab&TheSubj
MyNews.Close
%>
如果该news.txt不存在，那么系统会自动创建这个文件，因此当讨论组中发表了第一个文件，系统就会创建这个news.txt。
请注意这里面用到了VBScript的vbtab常量，这个常量就是tab键的作用，那么该news.txt必须用tab键进行URL地址和描述的分隔是上一章中介绍过的。