经过前面的努力,我们终于始一张空白的页面出现在了CS系统里, 接下来就要在这个空白的页面里加入我们想要的内容的,通过对CS代码的解读,我们知道CS的内容块都是采用了WEB用户控件的方式,而且在CS中所用的所有的ascx文件和ASPX文件一样是没有直接的绑定代码的.打开一些CS项目中在Controls文件夹下的文件,这些就是真正的控件的实现代码,所有CS控件都是继承自TemplatedWebControl,它是CS实现换肤的基础.

CS中所有的项目中都对TemplatedWebControl进行了一次甚至多次的继承,为什么要多次继承,具体原因我还不是搞得很明白,估计是为了提高代码的可读性和重用性.

对我们来说一开始不要搞得太复杂,我简单的写了个类做为我们项目的控件的基类

 

 

Community Server 插件开发一using System;
Community Server 插件开发一
using CommunityServer.Controls;
Community Server 插件开发一
using CommunityServer.Components; 
Community Server 插件开发一
Community Server 插件开发一
namespace Papersnake.LocalPhoto.Controls
Community Server 插件开发一
{
Community Server 插件开发一
public abstract class LocalPhotoTemplatedWebControl:TemplatedWebControl
Community Server 插件开发一
{
Community Server 插件开发一
public LocalPhotoTemplatedWebControl():base()
Community Server 插件开发一

Community Server 插件开发一
Community Server 插件开发一}
 
Community Server 插件开发一
Community Server 插件开发一
protected override void OnLoad(EventArgs e)
Community Server 插件开发一
{
Community Server 插件开发一
base.OnLoad(e);
Community Server 插件开发一
if (Context.Items["SetLocalPhotoLocation"== null)
Community Server 插件开发一
{
Community Server 插件开发一UsersOnline.SetLocation(
"My LocalPhoto"null);
Community Server 插件开发一Context.Items[
"SetLocalPhotoLocation"= true;
Community Server 插件开发一}

Community Server 插件开发一}
 
Community Server 插件开发一
Community Server 插件开发一
protected override string ExternalSkinFileName
Community Server 插件开发一
{
Community Server 插件开发一
get
Community Server 插件开发一
{
Community Server 插件开发一
return string.Format("/LocalPhotos/Skin-{0}.ascx"this.GetType().Name);
Community Server 插件开发一}

Community Server 插件开发一}

Community Server 插件开发一}

Community Server 插件开发一}

Community Server 插件开发一

 

非常简单,唯一需要提一下的就是,ExternalSkinFileName的这个属性, 它指定了, 我们的CS控件从哪个文件夹下去找它的皮肤文件.

回到CS的WEB项目中Themes\default\Skins\建一个名为LocalPhotos的文件夹,注意这个文件夹的名称要和ExternalSkinFileName属性中的统一.

做好的准备工作,我们就要来写我们要的功能了,为了简单起见,我们就搞一个最简单的,用一个Repeater把我们在硬盘上搜索到的图片文件的文件名全显示出来,先不要去考虑什么数据库什么的,不然的话,可能先了N多的代码,就因为一个功能没有完成,你就得不到一次运行一下你程序的机会, 这是很郁闷的一件事情,很多时候,我们就会因此而半途而废了.

在LocalPhotos中新建一个Skin-PhotoAllList.ascx的文件

 

 

Community Server 插件开发一<%@ Control %>
Community Server 插件开发一
<div class="CommonContentArea">
Community Server 插件开发一
<div class="CommonContent">
Community Server 插件开发一
<asp:Repeater ID="AllPhotoRepeater" runat="server">
Community Server 插件开发一
<ItemTemplate>
Community Server 插件开发一
<asp:Label ID="txtphypath" runat="server" /><br />
Community Server 插件开发一
</ItemTemplate>
Community Server 插件开发一
</asp:Repeater>
Community Server 插件开发一
</div>
Community Server 插件开发一
</div>

 

怎么样够简单吧, 就在里面另了一个名为AllPhotoRepeater的Repeater控件,在它的ItemTemplate中加一个名为txtphypath的子控件.完成了这个,又要回到我们自已的项目,为这个web用户控件写实现代码,也很简单,只是需要注意,这个类集成至我们的LocalPhotoTemplated,还有就是它的文件名必须和皮肤文件中Skin-PhotoAllList.ascx中的PhotoAllList统一,为什么这样,看一下我们LocalPhotoTemplated中的ExternalSkinFileName属性就明白了

 

 

Community Server 插件开发一using System;
Community Server 插件开发一
using System.Collections.Generic;
Community Server 插件开发一
using System.Web.UI.WebControls; 
Community Server 插件开发一
Community Server 插件开发一
using Papersnake.LocalPhoto.Components; 
Community Server 插件开发一
Community Server 插件开发一
namespace Papersnake.LocalPhoto.Controls
Community Server 插件开发一
{
Community Server 插件开发一
public class PhotoAllList : LocalPhotoTemplatedWebControl
Community Server 插件开发一
{
Community Server 插件开发一
private Repeater AllPhotoRepeater;//定义一个Repeater控件
Community Server 插件开发一
public PhotoAllList()
Community Server 插件开发一

Community Server 插件开发一
Community Server 插件开发一}
 
Community Server 插件开发一
Community Server 插件开发一
protected override void OnLoad(EventArgs e)
Community Server 插件开发一
{
Community Server 插件开发一
if (!Page.IsPostBack)
Community Server 插件开发一
this.DataBind();//在OnLoad中实现数据绑定
Community Server 插件开发一
base.OnLoad(e);
Community Server 插件开发一}
 
Community Server 插件开发一
Community Server 插件开发一
//这个方法是用来绑定皮肤文件中定义的控件的
Community Server 插件开发一
protected override void AttachChildControls()
Community Server 插件开发一
{
Community Server 插件开发一AllPhotoRepeater 
= (Repeater)FindControl("AllPhotoRepeater");
Community Server 插件开发一AllPhotoRepeater.ItemDataBound 
+= new RepeaterItemEventHandler(AllPhotoRepeater_ItemDataBound);
Community Server 插件开发一}
 
Community Server 插件开发一
Community Server 插件开发一
void AllPhotoRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
Community Server 插件开发一
{
Community Server 插件开发一photo tphoto 
= e.Item.DataItem as photo;
Community Server 插件开发一
if (tphoto == null)
Community Server 插件开发一
return;
Community Server 插件开发一
switch (e.Item.ItemType)
Community Server 插件开发一
{
Community Server 插件开发一
case ListItemType.Item:
Community Server 插件开发一
case ListItemType.AlternatingItem:
Community Server 插件开发一Label txtphypath 
= (Label)e.Item.FindControl("txtphypath");
Community Server 插件开发一txtphypath.Text 
= e.Item.ItemIndex.ToString()+":"+tphoto.PhyPath;//把绑定的数据在Label中显示出来
Community Server 插件开发一
break;
Community Server 插件开发一}

Community Server 插件开发一}

Community Server 插件开发一
public override void DataBind()
Community Server 插件开发一
{
Community Server 插件开发一
base.DataBind();
Community Server 插件开发一BindData();
Community Server 插件开发一}

Community Server 插件开发一
private void BindData()
Community Server 插件开发一
{
Community Server 插件开发一AllPhotoRepeater.DataSource 
= Photos.GetAllPhotos();
Community Server 插件开发一AllPhotoRepeater.DataBind();
Community Server 插件开发一}

Community Server 插件开发一}

Community Server 插件开发一}

Community Server 插件开发一

 

运行效果
Community Server 插件开发一 
非常简单的一个类,但是我们已经完成了开发CS插件的第一步,接下去我们要做的就只是进一步更细致的设计,以完成我们所需要的功能








    本文转自无心之柳.NET博客园博客,原文链接:http://www.cnblogs.com/9527/archive/2007/04/06/703411.html,如需转载请自行联系原作者


相关文章:

  • 2021-12-24
  • 2021-09-08
  • 2021-11-29
  • 2021-08-23
  • 2022-12-23
  • 2021-08-06
  • 2022-01-15
  • 2021-09-06
猜你喜欢
  • 2022-01-25
  • 2021-10-03
  • 2021-10-30
  • 2022-12-23
相关资源
相似解决方案