动态加载用户控件的组件!(四)

( 实在很懒,关于动态加载用户控件的内容实在写也写不完,说也说不完。关系到 asp.net 的一切! )

我们要做没有关联 cs 文件的 aspx 叶面。其实叶面的东西并不在 aspx 上,而是在 ascx 上。 Aspx 所起的作用只是一个入口。对组件的引用而已,而组件就可以管理很多的 ascx 页面,所谓的叶面 ascx 叶面也应该是没有关联 cs 的叶面。

所以整个系统所有的东西都是在组件里面, aspx 是单纯的访问入口, ascx 是纯页面的东西。 Aspx 入口调用组件,组件调用 ascx 页面以及相应客户的交互。

只有这样才能做到每工与后台的很好的分开。

完全可以有一个团队来开发页面(纯页面不需要任何的 cs 代码,全都是 ascx ),而有另一个团队来开发组件。最后组装成整个系统,由 aspx 调用组件就可以了。

让我们来作个无代码关联的 ascx 叶面,叶面上有个按钮,然后写个组件加载这个 ascx 叶面,以及如何响应这个按钮的事件!

(废话一下,写文章有时候不废话真是很痛苦的一件事情啊!) ascx 叶面与处理叶面的后台代码分开是一件非常好的事情,不知你有没有发现一个叶面有只能与一个后台代码文件关联,不可能有两个类来关联这个叶面。而用组件来加载 ascx 以及相应事件,那么你就可以用同一个叶面 ascx 而有很多种不同的组件调用。可重用就大大的。不仅在同一个项目内重用,而是想用就用。

实例一下:

作个无关联 cs 文件的 ascx 页面。上面有个 button. Id 为 mybutton. 当然是 run at server 我们才能在组件中找到他了! ascx 叶面也可以是文本文件。把后缀名改为 ascx 就行了。

用我前面写的 loadskin 来加载吧!然后在里面处理 button 的 onclick 事件就可以了。

然后在 aspx 中引用这个组件就行了。当然也可以在 ascx 中引用,都是一个效果。

Ascx 起名为 a.ascx. 上面只有一个 button

也是继承 SkinnedControl

namespace Region.Controls {

///

1<summary>
2
3///  加载用户组件,加载不同的组件 
4
5///  </summary>

public class Abutton : SkinnedControl {

Button bt;

public Abutton() : base ()

{

base .SkinPath = "a.ascx";

}

///

1<summary>
2
3///  初始化组建摸板,进行必要的动态设置或更新 
4
5///  </summary>

override protected void InitializeSkin(Control skin) {

bt = (Button)skin.FindControl("myButton");

bt.Click += new EventHandler(bt_Click);

skin.DataBind();

}

///

1<summary>
2
3///  获取组件 
4
5///  </summary>

public override ControlCollection Controls {

get {

EnsureChildControls();

return base .Controls;

}

}

private void bt_Click( object sender, EventArgs e)

{

bt.Text = "心雨楼";

}

}

}


我么在写个同样的组件叫 ebutton 根 Abutton 一样。

把事件改为 bt.Text = "心雨楼!!!!!!!!";

让我们来看看无代码的 aspx 是什么样子的!


运行之后就这个样子:

分别点击之后就这样:


相同的页面做不同的事情。

未完 ( 持续 )

Published At
Categories with Web编程
Tagged with
comments powered by Disqus