在我们传统的网站建设中通常是先设计网站页面,再利用开发工具,在网站的框架内进行功能设计。这样的网站建设存在很多弊端,其中最突出的缺点是不利于小组共同开发,各环节之间依赖性太强。
在asp.net中我们可以利用后台编码,把html用户界面设计(颜色、美学等)与页面代码区分开来。这样就可以解决我们小组的并行开发问题。
其主题思想是:美工来进行网站页面的设计,程序员对网站要实现的功能分模块开发。待到页面和功能模块开发完毕后,我们只要在美工界面中对其html代码稍加修改,就可以完成对应的功能。
下面就用一个小例子来进行说明。
程序员完成的功能有如下模块:
1. 在左边的column1处点击,中间的三个内容显示小组三条新闻
2. 在column2处点击,中间的三个内容显示三个人员情况
3. 在column3处点击,弹出一个窗口显示一张照片。
为了测试,我们可以将这三个功能分别交给两个程序员来做。
甲程序员:完成模块1和2
1. 甲可以先建立一个webapplication,在界面上放入两个imagebutton:ibtnnews,ibtnmember和六个label:lb1title,lb1detail, lb2title,lb2detail, lb3title,lb3detail。生成一个web应用程序,点击ibnews,六个label显示小组新闻,点击ibmember,六个label显示小组三名成员。这样我们就为建立源文件创建好了条件。
2. 我们建立一个c#类文件codebehind.cs。
3. 由于我们是建立的web程序,则需要在添加引用中,添加system.web.dll应用。
4. 去掉构造函数,因为后台编码不需要创建类。
5. 让类从page对象上继承功能,即
public class codebehind:system.web.ui.page
6. 将刚才生成的webapplication中的相关代码复制进来,主要有两个部分:声明部分和方法部分,在这里把应用程序中的可访问级别protected,改为public,因为只有这样外部的代码才可以访问我们的方法和变量,要注意的是页面上所有与后台编码文件交户的控件都要有一个对应的本地变量。
7. 生成一个codebehind.cs。
至此,甲程序员的工作完成。乙程序员可以用同样的方式生成他的codebehind.cs文件。甲乙两位程序员进行代码合成,完成一个完整的codebehinde.cs;
代码如下:
using system;
using system.web.ui;
using system.web.ui.webcontrols;
namespace codetest
{
public class news:system.web.ui.page
{
public system.web.ui.webcontrols.label lb1title;
public system.web.ui.webcontrols.label lb1detail;
public system.web.ui.webcontrols.label lb2title;
public system.web.ui.webcontrols.label lb2detail;
public system.web.ui.webcontrols.label lb3title;
public system.web.ui.webcontrols.label lb3detail;
public system.web.ui.webcontrols.imagebutton ibtnnews;
public system.web.ui.webcontrols.imagebutton iibtnmember;
public system.web.ui.webcontrols.imagebutton ibtncontact;
public void ibtnnews_click(object sender, system.web.ui.imageclickeventargs e)
{
…………………………
}
public void iibtnmember_click(object sender, system.web.ui.imageclickeventargs e)
{
…………………………
}
public void ibtncontact_click(object sender, system.web.ui.imageclickeventargs e)
{
string strscript="<script language=javascript>\n";
strscript+="window.alert("+"\"电话:66763467\""+");";
strscript+="</script>";
response.write(strscript);
}
}
}
下面我们来说明如何将建好的后台代码和美工好的网页结合起来。
1.集成工程师生成一个新的webapplication,将codebehind.cs文件保存在bin目录下,并将其加入引用。
2.集成工程师将美工好的网页的图片加入对应的引用,复制html代码,放入新的webapplication的页面中,这样,我们就可以看到美工好的页面展现在我们的.aspx文件中。
3.更改页面最上面的黄色代码,其中codebehind="codebehind.cs":让页面后台支持的代码指向我们写好的cs文件。inherits="codetest.codebehind":让页面继承于类codebehind中的功能,codetest为我们定义的名词空间。
4.在html代码中<body>内填入< form id="form1" method="post" runat="server">在</body>上面加上</form>。
5.相对应的地方拖入web控件,注意这里的id要与cs文件中的定义对应。
6.在html代码中,找到web控件,添加对应的方法名称。
这样就结合完毕。运行看看效果如何。
大家看上面在改动html代码的时候稍显麻烦,我们还有一种更简单的方法,只要在后台文件中加入几行代码,我们就不必在html中找到控件的位置,加入事件引用了。
在后台文件中加入
protected override void oninit(eventargs e)
//此方法引发init事件,当服务器控件初始化是发生。
{
初始化控件方法()
base.oninit(e);
}
private void初始化控件方法();
{
this.控件名.click+=new eventhandler(控件事件响应方法);
}
上面两个方法的加入,我们可以看到,只要我们在后台代码中加入初始化控件的方法,就可以将对应的事件加入进去,而不用在html代码中加入事件引用了。同样,我们将常用的page_load事件也可以实现
只要加入:
private void page_load(object sender,system.eventargs e)
{
代码;
}
private void初始化控件方法();
{
this.控件名.click+=new system.eventhandler(控件事件响应方法);
this.load+=new system.eventhandler(this.page_load);
}
eventhandler:是表示将处理不包含事件数据的事件的方法。
控件事件响应方法只要符合:方法名(object sender,system.eventargs e)就可以。
目前存在的问题:
1. 如何保持美工所作的效果不因使用了web控件而受影响。
2. 多人在做同一个网页的时候,只能通过合并cs文件的方法来集成后台代码。不利于代码的维护。
作者blog:http://blog.csdn.net/lfeng15/
