部署DreamweaverCtrls.dll控件后,你就可以任意的使用DW MX的ASP.NET服务器行为了。下面就先做个留言本首页。
操作步骤:
1、打开index.aspx页,先在页面中插入一个表单,切换到代码视图,找到<form>标榜,添加runat="server"属性,如<form name="form1" id="form1" method="post" runat="server" >。
然后根据下面页面样式在表单内插入四个表格,当然你可以完全定制自己的样式。
2、插入数据集
打开“服务器行为”行为面板,选择“数据集”。如下图。
弹出“数据集”对话框,设置如下图:
排序按ID号从大到小排列,这样可以把最新的留言排在最前面。切换到“绑定”面板,展开数据集字段,如下图所示
把各个字段绑定到页面上。如下图所示:
图片代码如下:
发新留言:<img src="gif/FIL3319.GIF" border="0">
Qicq:<img src="gif/FIL3241.GIF" alt="<%# DataSet1.FieldValue("Qicq", Container) %>" >
邮 箱:<img src="gif/FIL24111.GIF" border="0">
主 页:<img src="gif/FIL24113.GIF" border="0">
编 辑:<img src="gif/FIL3242.GIF" border="0">
回 复:<img src="gif/FIL24003.GIF" border="0">
用户头像:<img src="<%# DataSet1.FieldValue("Face", Container) %>" >
表情图标:<img src="<%# DataSet1.FieldValue("Miange", Container) %>" >
复选框名称为“delete”,选定值为:<%# DataSet1.FieldValue("id", Container) %>
其中“编辑”和“回复”这两个图片链接,管理员登陆后才能链接到相关页,否则转到出错信息页。删除留言复选框只有在管理员登陆后才会显示出来,这里为编辑方便,所以让它显示出来。稍后还要编写一段函数代码,用来控制它的显示是否。还有的就是管理员回复内容,上面页面样式没有给出,是因为这段代码要根据该留言的回复状态决定是否显示,是动态的HTML,必须用一段函数判断实现。
打开MyMessage.mdb数据表,在MessageBook表中随便输入一些记录,除title(留言标题)、MessageBook(留言内容)、MessageName(留言人姓名)字段外,其它的都可以留空。按F12键预览,能显示记录了。如下图:
3、插入重复区域
上面显示的是一条留言,插入重复区域以显示更多的留言。选中下三个表格,第一个发新留言的那个表格就不用选中它了,如下
切换到“服务器行为”面板,点击加号弹出下拉菜单中选择“重复区域”, 如下图:
弹出重复区域对话框,设置每页显示10条记录。当然,你可以任意设数目,可不要太多了,否则会导致浏览速度变慢。
单击“确定”保存设置。DW MX就会自动在刚才选中的表格周围插入了Repeater控件。Repeater是三个数据显示控件中最为灵活的一个,可以任意定义自己的模板,使页面显得更美观。如果你看了源代码,会觉得Repeater控件好像和普通的ASP循环语句相似。其实Repeater控件不是普通的循环语句那么简单,它是由DataSet数据集读出数据库中的记录,并一次填充Repeater,不是由循环指令一行一行地读出数据。
好了,按F12键浏览页面,可以显示10条留言了。可是,当留言超过了10条怎么办?可以用分页功能。
4、添加分页功能
执行菜单“窗口——》插入”,如下图,打开“插入”面板。
切换到“应用程序”选项卡,如下图:
将光标定位在想要放置分页的地方,点击弹出数据集导航条窗口,设置如下:
单击“确定”保存设置。在页面中插入分页导航链接:
打开数据库,添加多于10条的留言记录,预览页面,能正常分页。
把四个单元格合并,将光标在表格内定位,点击“插入”面板应用程序的“”,弹出数据集导航状态窗口,如下图:
生成的导航状态,如下图:
上面分页有第一页、前一页、下一页和后一页功能,页数很多时,就有得你翻了。所以再添加一个页码功能,想看那一页,点击页码编号就能到达。另外,还应该有提示总页数、当前页功能。
在上图分页表格下再插入一个表格:
把光标在表格内定位,插入“显示当前页号”行为,如下图:
弹出“显示当前页号”,选择DataSet1数据集。
按“确定”保存设置。浏览页面,翻页时能显示当前是第几页。还有的就是如何显示总页数和页码了。这个须要手工添加些代码,但不是很多。
代码清单:
当前页:<%= DataSet1.CurrentPage + 1 %>
总页数:<%# DataSet1.LastPage+1 %>
分页页码程序:
<%dim i as integer
for i=1 to (DataSet1.LastPage+1)
if (DataSet1.CurrentPage + 1)=i then
response.Write("<font color=#FF0000><strong>" & i &"</strong> </font> ")
else
response.Write("<a href=''''index.aspx?DataSet1_currentPage="& (i-1) &"''''>" & i &"</a> ")
end if
next%>
表现出来的效果如下:
表格做得不是很美观,你可以修饰它。
5.编写显示函数代码
对于访客而言,是没有删除留言的权限的,我们在留言本的首页添加了删除记录复选框,这个复选框必须是管理员登陆后才会显示出来。这里编写一段函数代码,判断Session会话是否有值,有的话则显示出来,并允许执行删除操作。
找到这段代码:
<input name="delete" type="checkbox" id="delete" value="<%#DataSet1.FieldValue("id", Container)%>">删除
这个直接在设计视图下选中复选框和删除文字,然后切换到代码视图就能找到该行代码了。替换成:
<%# strdetlete(DataSet1.FieldValue("id", Container)) %>
下面定义一个strdetlete函数,
<script runat="server">
function strdetlete(strid as integer) as string''''定义一个strdetlete函数
if not session("MM_Username") is nothing then''''当session不为空时
strdetlete="<input name=delete type=checkbox id=delete value="& strid &" >删除"
''''输出复选框及它的值
end if
end function
</script>
这段函数代码的作用是,判断session("MM_Username")是否有值,有的话则显示复选框和删除文字。这段函数仍然沿用了传统的ASP书写风格,可能是由于本人对ASP.NET了解得不够深入,没有使用先进的控件技术。这样作的目的为了实现批量删除,而DataGind控件虽然方便,但只能一次删除一条留言,所以本人没有作单独的删除记录页面。试把if not session("MM_Username") is nothing then改为if session("MM_Username") is nothing then,预览页面,复选框显示,查看页面源代码,复选框的值都能对应地等于留言的ID号。
6、编写WEB控件代码
解决复选框的显示问题,编写一段删除记录的WEB控件代码。
首先在页面中引入Macromedia控件(Macromedia公司开发的控件,集成在DreamweaverCtrls.dll控件程序集中,在标签选择器中可获得它)的DELETE控件,切换到源代码视图,在<script></script>代码块(即上面添加的函数代码)的下面编写以下代码:
<MM

elete id="Delete1" runat="server"></MM

elete>
必意注意:如果你想单独引用这个控件,则必须在页面顶部用以下语句调用DreamweaverCtrls.dll程序集:
<%@ Register TagPrefix="MM" Namespace="DreamweaverCtrls" Assembly="DreamweaverCtrls,version=1.0.0.0,publicKeyToken=836f606ede05d46a,culture=neutral" %>
如果你在DW MX在页面插入其它的服务器行为如数据集等,这个语句已被插入到页面,不用手工添加了。上面语句没有换行,因为表格排版问题被挤成两行。
在页面引入Delete控件,并声明在服务器端运行,还要编写一段SQL语句和读取配置文件中的连接字符串,以及响应删除按扭的事件句柄。
先在页面中加一个WEB控件按扭。切换到源代码视图,在页面的最底部(当然也可以是其它位置,我选在分页编码的下面),打开“插入”面板切换到“ASP.NET”选项卡。如下图:
在页中插入三个WEB内置控件,一个Button控件(按扭),两个label控件(动态文本显示)。 单击“”,打开标签编辑器,填写控件的ID名称和按扭文本,如下图:
再选中“事件”“OnClick”,在文本框中输入事件名称“sub_delete”,如下图:
单击“确定”保存设置。标签编辑器便在你想要的地方插入Button控件代码:
<asp:button ID="ButtonDelete" runat="server" Text="删除留言" OnClick="sub_delete" />
这时候请不要预览页面,会报错的。报错信息如下:
因此,我们还有编写一段响应该按扭的事件代码,即按下按扭时执行相应的语句命令,比如删除记录。
继续添加一个LABEL控件,单击“”,填ID名称和文本就行了,如下图。这个控件放在<form></form>表单标签内。
按这个方法添加另一个label控件,ID名称为Label2,如下图:
按确定保存设置。DW MX就在页面插入Label控件代码,切换到代码视图,把label1的文本改为:
Text="<script Language=JavaScript >alert(''''成功删除留言!'''')</script>
label2的文本改为:
Text="<script Language=JavaScript >alert(''''对不起!请选择要删除的留言!'''')</script>
这样可以弹出一个消息框提示:
上面仅是做了准备工作,还未有真正添加删除代码。下面的代码很长,不用手写了,直接复制过去,仔细阅读注释理解代码执行原理。
<script runat="server">
dim xxx as string''''声明一个全局变量
Sub Page_Load(Src As Object, E As EventArgs)''''页载载入时触发事件
xxx=request.form("delete")''''接收复选框集合值,并赋值给XXX变量
label1.Visible="False"''''初始化Label1控件不显示
label2.Visible="False"''''初始化Label2控件不显示
ButtonDelete.Visible="False"''''初始化扭按控件不显示
if not session("MM_Username") is nothing then''''当session不为空时
ButtonDelete.Visible="true"''''session变量有值时即显示按扭
end if
Delete1.ConnectionString= _
System.Configuration.ConfigurationSettings.AppSettings("MM_CONNECTION_STRING_MyMessageData")
''''读取数据库连接字符串
Delete1.CommandText="DELETE FROM MessageBook WHERE id in ("+ xxx +")"''''SQL删除语句
End Sub
Sub sub_delete(Src As Object, E As EventArgs)''''这是响应单击Button按扭控件的代码
if not session("MM_Username") is nothing then''''当session不为空时
if xxx<>"" then''''当复选框有钩选时
Delete1.Debug=true''''执行Delete控件删除命令
label1.Visible="True"''''成功删除记录,label1控件显示输出成功提示信息。
else''''否则
label2.Visible="True"''''没有选择删除项,label2控件显示输出出错提示。
end if
end if
End Sub
</script>
上面这段代码块放在刚才定义的函数块下面。现在可以预览页面了,测试时首先给session("MM_Username")赋值,用以下语句:
session("MM_Username")="李飞"
放在Sub Page_Load(Src As Object, E As EventArgs)的下一句。试试运行页面,按扭、复选框等都显示出来了?试删除几条记录,能否成功。我试能行了,不知你是否行?
7、格式化文本显示
删除留言的问题终于解决了,并且还能批量删除。但是你会注意到一个问题,在往数据库中添加记录的时候,明明有回车或换行的,可是到了这里却变成了一行了。再编写一段函数如下:
function strbrvbs(messagetext as string) as string
strbrvbs=Replace(messagetext,"<", "<")
strbrvbs=Replace(strbrvbs,">", ">")
strbrvbs=Replace(strbrvbs ,vbCrLf,"<br>")
strbrvbs=Replace(strbrvbs,chr(32)&chr(32), " ")
end function
这段代码放在刚才定义的函数段下面。然后找到
<%# DataSet1.FieldValue("MessageBook", Container) %>
替换为:
<%# strbrvbs(DataSet1.FieldValue("MessageBook", Container)) %>
就解决回车换行问题了。
8、显示管理员回复内容
管理员回复实际上是更新记录,回复内容用一个字段保存,访客留言和管理员回复内容同一条记录。当这个字段的该行有记录时,则显示回复内容。把回复字段绑定到页面,看它的值是否为“Nothing”,再决定是否显示回复内容及表格。
编写以下函数:
function AdminRel(relmessage)
if relmessage<>Nothing then
AdminRel="<br><table width=550 border=0 cellpadding=2 cellspacing=0 bgcolor=#E1F3FF>" & _
"<tr><td> 管理员回复:" & strbrvbs(relmessage) &"</td></tr></table>"
end if
end function
然后在页面中调用函数:
<%#AdminRel(DataSet1.FieldValue("MessageAdmin", Container)) %>
这句代码放在留言内容字段的右边。运行结果:
没有回复时则不显示表格。
好了,至此,留言本的首页终于制作完毕。