id="lblUserName" Font-Name="Arial" ForeColor="red" Text="游客" runat="server" />
权限:<asp:Label id="lblPurview" Font-Name="Arial" Text="无" ForeColor="red" runat="server" />
</asp:Panel>
</form>
</body>
</html>
例程中,大家可以清楚地看到程序中不包含任何C#、VB、JavaScript来处理OnAdCreated与OnClick事件,但是执行本程序,程序能够正常使用(如图2-1与图2-2)。这便是使用CodeBehinde的结果,事件处理已经被转移到其它程序中定义执行。请大家注意本例中第一行的信息:
<% @ Page Src="cs\EventHandle.cs" Inherits="Aspcn" %>
一般在ASP.Net程序中,Page指令都在设定本程序应当使用什么语言(使用Language属性),而本例中没有出现Language属性,而是出现了两个新的Page属性:Src与Inherits。Src属性设定事件处理真正的代码位置,Inherits属性则设定需要引入的类名。可以看到本例中定义事件处理的文件是EventHandle.cs,我们来看看它的具体内容:
using System;
using System.Data;
using System.Data.SqlClient;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
public class Aspcn : Page
{
//声明Web Form中出现的控件
public Label lblAdText,lblUserName,lblPurview,lblMsgShow;
public TextBox tbUserName,tbPasswd;
public Button btnSubmit;
public AdRotator ad;
private string strConnString = "server=(local)\\Feidao;database=aspcn;Trusted_Connection=yes";
//处理Adrotator控件建立事件
public void AdCreated(Object src,AdCreatedEventArgs e)
{
lblAdText.Text = e.AlternateText;
}
public void Submit_Click(Object sender,EventArgs e)
{
SqlConnection MyConn = new SqlConnection(strConnString);
MyConn.Open();
string strUserName,strPassword,strSelect;
strUserName = tbUserName.Text;
strPassword = tbPasswd.Text;
strSelect = "select * from bbs_user where id=''"+strUserName+"'' and password=''"+strPassword+"''";
SqlCommand MyComm = new SqlCommand(strSelect,MyConn);
SqlDataReader dr = MyComm.ExecuteReader();
if(dr.Read())
{
//登陆成功
lblMsgShow.Text = "登陆成功";
lblUserName.Text = dr["id"].ToString();
lblPurview.Text = dr["purview"].ToString();
}
else
{
//登陆不成功
lblMsgShow.Text = "登陆不成功";
}
dr.Close();
MyConn.Close();
}
}
进行事件处理是定义在一个类中的(本例中是Aspcn,注意大小写),由于需要与Web Forms相关联,所以此类还必须继承Page类。
分析程序,大家可以看到程序中对事件的处理操作是与普通的未进行代码分离的程序是一样的,并没有什么特别的地方。(本人在程序中已经给出的相关注释,相信对大家理解程序有所帮助)
使用CodeBehind技术后,大家需要多写一些代码,比如声明控件等,也许大家很不喜欢多写这样的代码,但是大家也必须看到使用了CodeBehind技术后,主程序的可读性大大增加了。在Example1.aspx中相信大家很快就可以区分页面构架的各个部分,大家想想这些构架如果在其它技术是否能看得如此清楚?
2 用户控件(UserControl)
CodeBehind技术真正实现了代码与构架的分离,比以前的技术前进了一大步,但是它的缺陷也是显而易见的,比如主页面中部那个登陆区,如果内容很多,HTML显示