荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Kenko (坎坷), 信区: DotNET
标  题: 用ASP.NET写的留言本[zz]
发信站: 荔园晨风BBS站 (Fri Apr 23 13:57:43 2004), 转信

http://www.asp888.net 豆腐技术站

前言:
俗话说,眼看千遍,不如手写一遍,的确,很多纯粹理论性的东西,看多了,只是
有了个简单的
认识,其实在具体的程序调试过程中,肯定会遇到很多很多的问题
一直想给大家写个什么程序的,但是 豆腐最近特别忙,年底了,什么事情都要结
算,再加上我一直
要想办法写一些文章来奉献给大家,终于抽出来一个下午,来做了一个这样的程序
,结果忘记关OICQ了,
很多的网友的信息 都没有时间回复,在这里向 jspfuns 和 蓝 表示道歉。

程序开始前的准备工作:
首先要考虑的就是 如何在一个 所有的程序都可以访问到的地方设置sql server
的连接串,因为我
正在全力以赴的准备做一个现在的http://www.asp888.net 的aspx版本的站点,如
果只是为这个留言版单独
做一个conn连接串,未免太。。。,在asp+中MS 抄袭了 jsp 的一些概念和做法,
在jsp中有config.xml文件
asp+中有config.web 把这个文件放到留言版所在的虚拟目录下,将连接串放在这
里,大家请看我的连接串
<configuration>
<appsettings>
<add key="Conn" value="server=localhost;uid=sa;pwd=;Database=doufu"/>
</appsettings>
</configuration>

好了,准备工作都做好以后,准备开始做留言版的录入部分,开始想纯粹使用vs7自
代的web forms 功能,
后来发现有一些实际使用的不方便,所以还是用了一些传统的方法和web forms 结
合使用,但是这样 vs7
的智能感知 功能就不能用了,好可惜。default.aspx 的内容如下
<%@ Page language="c#"%>
<HTML><HEAD>
<meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
<meta name="CODE_LANGUAGE" Content="C#"></HEAD>
<body>
<a href="http://www.asp888.net">豆腐技术站</a>亲情奉献
<form method="post" action="doLiuyan.aspx" runat="server">

<Table border=1>
<tr>
<td width="20%">您的呢称:</td>
<td><asp:TextBox BackColor="#ccffff" id=txtName Runat=server ></asp:
TextBox></td>
</tr>
<tr>
<td width="20%">您的联系Email:</td>
<td width="80%"><asp:TextBox id=txtMail runat="SERVER"
BackColor="PowderBlue" Width="154" Height="26" MaxLength="40"></asp:
TextBox></td>
</tr>
<tr>
<td width="20%">您的发言主题:</td>
<td width="80%"><asp:TextBox id=txtTitle runat="SERVER"
BackColor="PowderBlue"></asp:TextBox></td>
</tr>
<tr>
<td width="20%">您的留言内容</td>
<td width="80%"><asp:TextBox id=txtContent runat="SERVER"
BackColor="PowderBlue" Width="244" Height="129"
TextMode="MultiLine"></asp:TextBox></td>
</tr>
</Table>
<input type="submit" name="Button1" value="提交留言" id="Button1"
style="background-color:Wheat;border-style:Dotted;">

<input type="reset" name="Button2" value="取消留言" id="Button2"
style="background-color:Wheat;border-style:Dotted;">

<a id="HyperLink1" title="点击这里察看所有留言" href="showmsg.aspx"
style="background-color:AntiqueWhite;border-style:Dotted;">察看所有留言
</a></p>
</form>
</body></HTML>
呵呵,这个页面我用来测试web form 所以搞了一些 没名堂的 东西,呵呵:)

asp+版本简单的留言板的制作(二)
(www.Jojoo.net)  2000-12-10 (请双击自动滚屏观看,单击停止,再击..)


http://www.asp888.net 豆腐技术站

在留言的录入界面完成后,自然要准备做留言内容的录入了。这个其中一个很关键
的地方就是
如何将我们在config.web 的内容读取出来,我用了下面的几条语句
Dim Cfg as HashTable
Cfg = Context.GetConfig("appsettings")
Conn = New SQLConnection(cfg("Conn"))
这样就得到了我们在config.web 中设定的 连接串,程序如下
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SQL" %>
<script runat="server" language="VB">
Sub Page_Load(Src As Object, E As EventArgs)

Dim conn As SQLConnection
Dim Cfg as HashTable
Cfg = Context.GetConfig("appsettings")
Conn = New SQLConnection(cfg("Conn"))
dim strSQL as string
dim strNickName as string
dim strMail as string
dim strTitle as string
dim strContent as string
dim strIPAddr as string
strNickName=replace(request.form("txtName"),"'","''")
strEmail=replace(request.form("txtMail"),"'","''")
strTitle=replace(request.form("txtTitle"),"'","''")
strContent=replace(request.form("txtContent"),"'","''")
strIPAddr=Request.ServerVariables ("REMOTE_ADDR") '用户IP地址
strSQL="insert into msgBoard(nickname,email,ipAddr,msgTime,msgTitle,
msgContent)values("
strSQL=strSQL & "'" & strNickName & "','" & strEMail & "','" & strIPAddr
 & "',getdate(),'" & strTitle & "','" & strContent & "')"
response.write(strSQL)
Dim Cmd As SQLCommand
Cmd = New SQLCommand(strSQL,conn)
Cmd.ActiveConnection.Open()
Cmd.Execute()
Cmd.ActiveConnection.Close()
Response.Redirect("showmsg.aspx")
end sub
</script>
大家其实一看,就知道这段程序其实和asp的程序没有什么区别嘛,对了,跟着
MS 的唯一的好处就是 他们在升级的时候
总是对他们的以前的系统进行了很好的 兼容,除了因为引用了 ado.net 而使得数
据库的操作 改变的比较多以外,其他的
代码基本上都没有什么大的改变,糟糕 说道这里 就说错了一句话,不是没有什么
大的改动,变化还是很大的,只不过对
以前兼容了,我们这样的简单的应用,似乎也不会牵扯到什么复杂的改变的:)

asp+版本简单的留言板的制作(三)
(www.Jojoo.net)  2000-12-10 (请双击自动滚屏观看,单击停止,再击..)


http://www.asp888.net 豆腐技术站

现在该显示了,其实显示是很简单,只要看过豆腐前面文章的朋友应该都知道该怎
么写这个
程序,但是我在这里要强调的是 分页 的程序,我也和大家 一样,在开始的时候
,想利用web form
的数据绑定的功能,但是不幸的是,虽然用datagrid 实现绑定和分页都是很简单
的,但是 datagrid
显然形式上的Grid显然对 留言版 这样的程序是 不适合的,DBList 到是可以适合
留言版的程序形式
但是 我查找了很长的时间 都没有找到如何去 实现分页的程序
后来在 MSDN 上找到了 PagedDataSource 看看他的 Class Member 我都心惊肉跳
,所有的我要的分页
的功能他都已经提供了,但是我在调试的过程中,却怎么也 无法通过,估计是和我
的 PDC 版本的原因,
这个时候,我就想起了 开心(注:网友名称,他曾经建议我直接安装NGWS beta1
和 Vs7 beta1):)

希望大家如果在 Beta1 上调试成功了以后,一定要告诉豆腐

没有别的办法,我只好就去用我的老办法,用程序去控制,老天,我不想这样,但
是我真的没有别的
办法了

大家请看程序:
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Web.Security" %>
<%@ Import Namespace="System.Web.UI" %>
<%@ Import Namespace="System.Data.SQL" %>
<HTML><HEAD>
<script runat="server" language="VB">
dim sqlRead as SQLDataReader
dim intStart as integer
dim intLen as integer
dim intPageCount as integer
dim intRecCount as integer
Sub Page_Load(Src As Object, E As EventArgs)
Dim conn As SQLConnection
Dim Cfg as HashTable
Dim sqlcmd As SQLCommand

Cfg = Context.GetConfig("appsettings")
Conn = New SQLConnection(cfg("Conn"))

dim strSQL as string
'实在是没有办法,只好这样来获得 记录总数了
'根据NGWS的帮助上看 似乎有个PagedDataSource 好象功能挺强大
'但是 就是 不知道 应该怎么使用 也没有见过 用他的例子
strSQL="select count(*) as ccount from msgBoard"
sqlcmd = New SQLCommand(strSQL,conn)
sqlcmd.ActiveConnection.Open()
sqlcmd.execute(sqlRead)
sqlRead.Read()
intRecCount=cInt(sqlRead("ccount"))
sqlcmd.ActiveConnection.Close()
strSQL="select * from msgBoard order by msgid desc"
sqlcmd = New SQLCommand(strSQL,conn)
sqlcmd.ActiveConnection.Open()
sqlcmd.execute(sqlRead)


if isNumeric(request.querystring("start")) then
intStart=Cint(request.querystring("start")) '本页数据起使位置
else
intStart=0
end if

intLen=10 '每页需要显示的数据数量
'以下计算 当前的 记录的分页页数
if (intRecCount mod intLen)=0 then
intPageCount=intRecCount/intLen
else
intPageCount=(intRecCount-(intRecCount mod intLen))/intLen+1
end if
dim i as integer
'将得到的sqlRead向后移动 start 指定的 位置
for i=0 to intStart-1
sqlRead.read()
next
end sub
sub WritePage(start as integer,file as string)
'进行分页处理
dim strWrite as string
strWrite="<table border=1 width=100%><tr><td>"
response.write(strWrite)

if start=0 then
strWrite="首页"
else
strWrite="<a href='" & file & "?start=0'>首页</a>"
end if
response.write(strWrite)

if start>=1 then
strWrite="<a href='" & file & "?start=" & cStr(start-intLen) & "'>上页
</a>"
else
strWrite="上页"
end if
response.write(strWrite)

if start+intLen<intRecCount then
'还没有到最后一页数据
strWrite="<a href='" & file & "?start=" & cStr(start+intLen) & "'>下页
</a>"
else
strWrite="下页"
end if
response.write(strWrite)

if start+intLen<intRecCount then
'还没有到最后一页数据
strWrite="<a href='" & file & "?start=" &
cStr((intPageCount-1)*intLen) & "'>末页</a>"
else
strWrite="末页"
end if
response.write(strWrite & "</td><td>")

strWrite="当前共有留言" & Cstr(intRecCount) & ",现在是第<font
color=red>" & cStr((intStart/intLen)+1) & "/" & cstr(intPageCount) &
"</font>页"
response.write(strWrite)
strWrite="</td></tr></table>"
response.write(strWrite)
end sub
</script>
<title>豆腐技术站__aspx分站__查看留言</title>
<link rel="stylesheet" type="text/css" href="/doufu.css">
</HEAD>
<BODY>
<a href="http://www.asp888.net">豆腐技术站</a>亲情奉献<br>
<%
WritePage(intStart,"a.aspx")
dim atEnd as boolean
%>
<% for i=0 to intLen-1%>
<%
atEnd=sqlRead.read()
if not atEnd then exit for
%>
<div align=center>
<table border=1 width=80%>
<tr>
<td width=10%>呢称</td>
<td width=40%><%=sqlRead("nickname")%></td>
<td width=10%>IP地址</td>
<td width=10%><%=sqlRead("IPAddr")%></td>
</tr>
<tr>
<td width=10%>联系方式</td>
<td width=90% colspan=3><%=sqlRead("email")%></td>
</tr>
<tr>
<td width=10%>留言主题</td>
<td width=90% colspan=3><%=sqlRead("msgTitle")%>----<font
color=red><%=sqlRead("msgTime")%></font></td>
</tr>
<tr>
<td width=10%>留言内容</td>
<td width=90% colspan=3><%=server.
HTMLEncode(sqlRead("msgContent"))%></td>
</tr>
</table>
</div>
<p></p>
<%next%>
</body>
</html>
终于完了:)

结束语:
在大家看过 三篇文章后,整个的留言版的程序也就已经全部的讲完了,客观的说
,通过这个程序
我们还无法完全的领略asp+给我们带来的所有令人兴奋的功能,而且还有很多的功
能现在似乎还是在
宣传的阶段,但是 毕竟现在才是Beta1 的阶段,相信在正式版本推出的时候,我
们可以看到一个全新
的面向 Web 编程的 .net 平台
asp+版本简单的留言板的制作(三)
(www.Jojoo.net)  2000-12-10 (请双击自动滚屏观看,单击停止,再击..)


http://www.asp888.net 豆腐技术站

现在该显示了,其实显示是很简单,只要看过豆腐前面文章的朋友应该都知道该怎
么写这个
程序,但是我在这里要强调的是 分页 的程序,我也和大家 一样,在开始的时候
,想利用web form
的数据绑定的功能,但是不幸的是,虽然用datagrid 实现绑定和分页都是很简单
的,但是 datagrid
显然形式上的Grid显然对 留言版 这样的程序是 不适合的,DBList 到是可以适合
留言版的程序形式
但是 我查找了很长的时间 都没有找到如何去 实现分页的程序
后来在 MSDN 上找到了 PagedDataSource 看看他的 Class Member 我都心惊肉跳
,所有的我要的分页
的功能他都已经提供了,但是我在调试的过程中,却怎么也 无法通过,估计是和我
的 PDC 版本的原因,
这个时候,我就想起了 开心(注:网友名称,他曾经建议我直接安装NGWS beta1
和 Vs7 beta1):)

希望大家如果在 Beta1 上调试成功了以后,一定要告诉豆腐

没有别的办法,我只好就去用我的老办法,用程序去控制,老天,我不想这样,但
是我真的没有别的
办法了

大家请看程序:
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Web.Security" %>
<%@ Import Namespace="System.Web.UI" %>
<%@ Import Namespace="System.Data.SQL" %>
<HTML><HEAD>
<script runat="server" language="VB">
dim sqlRead as SQLDataReader
dim intStart as integer
dim intLen as integer
dim intPageCount as integer
dim intRecCount as integer
Sub Page_Load(Src As Object, E As EventArgs)
Dim conn As SQLConnection
Dim Cfg as HashTable
Dim sqlcmd As SQLCommand

Cfg = Context.GetConfig("appsettings")
Conn = New SQLConnection(cfg("Conn"))

dim strSQL as string
'实在是没有办法,只好这样来获得 记录总数了
'根据NGWS的帮助上看 似乎有个PagedDataSource 好象功能挺强大
'但是 就是 不知道 应该怎么使用 也没有见过 用他的例子
strSQL="select count(*) as ccount from msgBoard"
sqlcmd = New SQLCommand(strSQL,conn)
sqlcmd.ActiveConnection.Open()
sqlcmd.execute(sqlRead)
sqlRead.Read()
intRecCount=cInt(sqlRead("ccount"))
sqlcmd.ActiveConnection.Close()
strSQL="select * from msgBoard order by msgid desc"
sqlcmd = New SQLCommand(strSQL,conn)
sqlcmd.ActiveConnection.Open()
sqlcmd.execute(sqlRead)


if isNumeric(request.querystring("start")) then
intStart=Cint(request.querystring("start")) '本页数据起使位置
else
intStart=0
end if

intLen=10 '每页需要显示的数据数量
'以下计算 当前的 记录的分页页数
if (intRecCount mod intLen)=0 then
intPageCount=intRecCount/intLen
else
intPageCount=(intRecCount-(intRecCount mod intLen))/intLen+1
end if
dim i as integer
'将得到的sqlRead向后移动 start 指定的 位置
for i=0 to intStart-1
sqlRead.read()
next
end sub
sub WritePage(start as integer,file as string)
'进行分页处理
dim strWrite as string
strWrite="<table border=1 width=100%><tr><td>"
response.write(strWrite)

if start=0 then
strWrite="首页"
else
strWrite="<a href='" & file & "?start=0'>首页</a>"
end if
response.write(strWrite)

if start>=1 then
strWrite="<a href='" & file & "?start=" & cStr(start-intLen) & "'>上页
</a>"
else
strWrite="上页"
end if
response.write(strWrite)

if start+intLen<intRecCount then
'还没有到最后一页数据
strWrite="<a href='" & file & "?start=" & cStr(start+intLen) & "'>下页
</a>"
else
strWrite="下页"
end if
response.write(strWrite)

if start+intLen<intRecCount then
'还没有到最后一页数据
strWrite="<a href='" & file & "?start=" &
cStr((intPageCount-1)*intLen) & "'>末页</a>"
else
strWrite="末页"
end if
response.write(strWrite & "</td><td>")

strWrite="当前共有留言" & Cstr(intRecCount) & ",现在是第<font
color=red>" & cStr((intStart/intLen)+1) & "/" & cstr(intPageCount) &
"</font>页"
response.write(strWrite)
strWrite="</td></tr></table>"
response.write(strWrite)
end sub
</script>
<title>豆腐技术站__aspx分站__查看留言</title>
<link rel="stylesheet" type="text/css" href="/doufu.css">
</HEAD>
<BODY>
<a href="http://www.asp888.net">豆腐技术站</a>亲情奉献<br>
<%
WritePage(intStart,"a.aspx")
dim atEnd as boolean
%>
<% for i=0 to intLen-1%>
<%
atEnd=sqlRead.read()
if not atEnd then exit for
%>
<div align=center>
<table border=1 width=80%>
<tr>
<td width=10%>呢称</td>
<td width=40%><%=sqlRead("nickname")%></td>
<td width=10%>IP地址</td>
<td width=10%><%=sqlRead("IPAddr")%></td>
</tr>
<tr>
<td width=10%>联系方式</td>
<td width=90% colspan=3><%=sqlRead("email")%></td>
</tr>
<tr>
<td width=10%>留言主题</td>
<td width=90% colspan=3><%=sqlRead("msgTitle")%>----<font
color=red><%=sqlRead("msgTime")%></font></td>
</tr>
<tr>
<td width=10%>留言内容</td>
<td width=90% colspan=3><%=server.
HTMLEncode(sqlRead("msgContent"))%></td>
</tr>
</table>
</div>
<p></p>
<%next%>
</body>
</html>
终于完了:)

结束语:
在大家看过 三篇文章后,整个的留言版的程序也就已经全部的讲完了,客观的说
,通过这个程序
我们还无法完全的领略asp+给我们带来的所有令人兴奋的功能,而且还有很多的功
能现在似乎还是在
宣传的阶段,但是 毕竟现在才是Beta1 的阶段,相信在正式版本推出的时候,我
们可以看到一个全新
的面向 Web 编程的 .net 平台

--
※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.36.110]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店