用ASP.NET3.5开发SNS:用户接口页面设计 -
时间:2010-09-03 来源:缘分星空
本篇我们将首先讨论用户接口母版页面的设计,然后重点讨论系统中主要用户接口页面的设计问题。
设计用户接口母版页面—Page.Master
我们想在所有的用户接口页面中实现一个一致的导航侧栏,对于我们的博客系统来说,此导航栏位于右边。这个导航栏将列出下列内容:
一段有关于当前博客的简短描述。
一个标签链接列表。这个列表中将仅显示至少关联到一个博客入口的标签。单击其中一个标签会把当前用户导航到相应于此标签的所有的博客入口。
一个文章链接列表。这个列表将显示标记为文章的博客入口的标题。一旦单击该标题,即打开相应的博客入口。
一个按降序排列的日期链接的列表。这个列表将显示发布博客入口对应的日期。一旦单击其中的某个月份,在该月份发布的所有的博客入口都将被显示。
一个用户可以订阅的RSS回馈的列表。
这个导航侧栏将会出现在所有的用户接口页面上。因此,我们需要在Page.Master母版页面中实现它。
导航侧栏中的第一个元素,即关于当前博客的描述,事实上是应用程序的配置文件web.config中的一个定制设置:
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--><appSettings>
<add key="blogdescription" value="<h3>关于我!</h3><p>这里是你的博客描述。</p>" />
</appSettings>
关于我!
这里是你的博客描述。
">上面这段博客描述事实上是一个应用程序配置参数,由博客管理员通过博客建立页面进行维护(后面再讨论)。方案中包含了一个静态工具类BlogoSettings (位于文件Code/Utils/BlogoSettings.cs中),它允许你从web.config文件中读写这些设置。既然总会存在这些配置参数的仅有的一个实例,所以,就没有必要把它们存储在数据库中,而是直接存储在配置文件web.config中。在Page.Master文件的右侧,放置了一个标签控件。在Page_Load函数中,用博客描述信息来填充这个标签的值。请注意,此博客描述信息是使用BlogoSettings类从web.config文件中读取的。相应代码如下:
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->protected void Page_Load(object sender, EventArgs e)
{
LabelBlogDescription.Text = BlogoSettings.BlogDescription;
}
接下来在侧栏中要实现的是三个链接区段,都是根据数据库内容生成的。实现这些内容有许多种方案,但是在我们的架构中一个颇为吸引人的选择是使用ASP.NET中新推出的ListView控件,还有另一个ObjectDataSource控件。ListView控件在控制生成的标签方面效率相当不错,而ObjectDataSource控件使我们能够把ListView控件数据绑定到业务逻辑层。
下面,我将详细地描述第一个区段的标签链接的实现过程。至于其他两个区段,其工作方式类似,读者可以自行在Page.Master文件的源代码中详细分析。
首先,在Page.Master文件中添加一个ObjectDataSource控件并且使用智能标签菜单配置它。在“选择业务对象”对话框中,从业务逻辑层选择TagManager类,并且勾选复选框控件“只显示数据组件”,如下图所示。
图1. ObjectDataSource组件的业务对象选择界面
在接下来的“定义数据方法”对话框中,针对Select语句选择GetListUsedTags方法。
图2. ObjectDataSource数据方法选择界面
注意,这个来自于业务逻辑层的方法看起来就象是在本地一样,这是因为它们修饰以特别的属性(已经在前面讨论过)。该GetListUsedTags方法来自于业务逻辑层,它负责返回一个至少存在一个博客入口的标签对象的列表。由于我们仅想显示这个标签列表,所以我们就不需要更新,插入或者删除等方法了。因此,我们可以单击“完成”按钮直接关闭配置向导。
接下来,我们在Page.Master文件中再添加一个ListView控件。然后,设置它的下列两个重要属性:
DataSourceID:我们需要把这个属性设置为我们刚刚创建的ObjectDataSource控件的ID。
ItemPlaceHolderID:把这个属性设置为itemContainer。
现在,既然我们配置好了ObjectDataSource和ListView控件,接下来我们就可以使用ListView控件的标记模板控制要输出的内容了。为此,我们使用了典型的静态标记与动态数据绑定方式的组合编码:
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--><asp:ListView ID="ListTags" runat="server" DataSourceID="ObjectDataSourceTags"
EnableViewState="False" ItemPlaceholderID="itemContainer">
<LayoutTemplate>
<h3>标签</h3>
<div class="content">
<ul class="linklist">
<li><a href="TagCloud.aspx">> 标签 <</a></li>
<asp:PlaceHolder ID="itemContainer" runat="server" />
</ul>
</div>
</LayoutTemplate>
<ItemTemplate>
<li><a href="BlogByTag.aspx?tag=<%# Eval("id") %>"><%#Eval("tagname") %></a></li>
</ItemTemplate>
<EmptyDataTemplate>
<h3>Tags</h3>
<div class="content">
<ul class="linklist">
<li>尚未提供标签。</li>
</ul>
</div>
</EmptyDataTemplate>
</asp:ListView>
在本文示例中,我们使用了ListView控件的三个不同的标记模板:
LayoutTemplate模板:这个模板生成标记的顶级嵌套,它包含开始和结束标记。更为重要的是,在这个模板内部加入了itemContainer占位符控件,此控件将包含通过ItemTemplate模板生成的结果标记。
ItemTemplate模板:这个模板定义了针对每单个的标签需要生成的标记。易见,在上面的代码中综合使用了静态HTML和数据绑定标签属性(标签对象的id和tagname)。
EmptyDataTemplate模板:当不存在由ObjectDataSource控件返回的标签对象时使用这个模板。
在侧栏部分的按日期分布的文章和博客入口动态的链接列表也是以类似上面的方式工作:联合使用ListView和ObjectDataSource控件来配置要检索和显示的内容。
amazon leather gloveskathy van zeeland leopard pursewood burning ironsian rolls artistrascals child model agencyhotel accommodationsworld travel jobssmall travel bagsart history lessonquilted patchwork handbagspersonal watercraft rentalcosta marina cruise shipmedium hobo handbagopi avojuice lotionjessica rabbit walletrent own homes north carolinabeach side homesauto leather repaircockpit decalslouis vuitton leather jacketcarnival cruises spring breaksewing machine motor manufacturersleather dye gourdsaircraft fastenersmexican wrestler youtubegeneral leather storepolo tote bagtivoli audio music systemcoach handbags italycompare quiksilver walletwater color pencilsarmani saleart michaelsnorwegian cruise panama canalmulti canvas artwitt saddlery leather goods manufacturersroyal caribbean cruise europecute leather pursesemerald princess cruise ship picturesdelsey pro digital backpackready wear collectionll bean pursesleather floggersall bali beach villasused louis vuitton handbags salecustom canvas printskingstown hotelrental cabinsG181094silver leather skirt