一. ASP.NET的两种页面结构
1、 内联编码模型——即将后台代码和前台页面代码都写在.aspx的页面之中,有点类似于javascript的用法,即在header标签里面添加script标签:如
<script runat=”server”>
Protected void Button1_Click(object sender,EventArgs args)
{
Label1.text=”我是一只小小鸟”;
}
</script>
注意在内联编码模型中,script标签的runat属性一定不能掉哦。
2、 隐藏代码模型
即将前台代码和后台代码分开,后台代码写在.aspx.cs文件里面,这也是编写ASP.NET程序所推荐的方式。
二. 几种需要注意的页面指令
1、向页面引入命名空间
<%@ Imort Namespace=”System.IO” %>
<%@Imort Namespace=”System.Data.SqlClient” %>
该指令用来向页面带入一个命名空间,比如上面的IO命名空间,然后就可以使用IO里面的类了,比如File类,该指令只有一个特性,就是Namespace,它的值就是名称空间的字符串表示。
2、 向页面引入程序集
<%@ Assembly Name=”MyAssembly” %>
引入程序集之后,就可以使用这个程序及里面的类,接口等成员了,注意,Name属性的值仅仅是程序集的名称,没有后缀哦。
3、 向页面引入接口
<%@ Implements Interface=”System.Web.UI.IValidator”%>
该指令只支持这一个Interface特性,当引入接口之后,就可以使用接口里面定义的方法,事件,属性了。
4、 Register指令,用户自定义控件在页面上使用时使用该指令
5、 PreviousPageType指令,参加下面的跨页面数据传送
三、数据的跨页面传输
所谓“数据的跨页面传输”,指的是一个页面中的数据,这些数据可能是控件的值,该页面的一些字段或者是属性的值,通过某种方式传递到另外一个页面中去。
比如有一个原页面为source.aspx,它的样式如下
而目标网页实现的效果为destination.aspx,它的样式如下
要实现的功能就是,在这两个文本框连输入相应的值,然后跳转到另一个页面的文本框去显示这两个值,当然,如果是在本页面内显示,这很简单,只需要设置按钮的Click事件即可,但是怎么去设置页面的跳转呢,我们只需要使用该按钮的PostBackUri属性指定到需要的页面即可,即如下
<asp:Button ID="Button1" runat="server" PostBackUrl="~/destination.aspx" Text="传送数据吧!"/>
即将该属性的值指向需要打开的新网页即可。
但是有一个问题,打开这个新的页面之后,怎么去获取传送进来的数据呢,有两种方法可以实现。
(1) 方法一
通过目标网页的page类的PreviousPage属性的FindControl方法获取原网页上面的控件值,因为该方法返回的是基类Control,所以需要一个强制类型转换,如下:
在目标网页中的代码如下:
protected void Page_Load(object sender, EventArgs e)
{
if (Page.PreviousPage != null)
{
TextBox name = (TextBox)Page.PreviousPage.FindControl("TextBox1");
TextBox age = (TextBox)Page.PreviousPage.FindControl("TextBox2");
TextBox1.Text = "姓名:" + name.Text + Environment.NewLine + "年龄:" + age.Text;
}
}
由上面的方法可知,这种方法实际上是将原网页上的控件的数据做了一个拷贝副本,所以可以这样使用。即name就相当于TextBox1,age就相当于TextBox2.
但这种方法也有一个问题,那就是由于是通过查找原网页上指定的空间名称得到的返回值,只能够传递控件的值,而对于原网页中字段或者是其他属性的值不能够传递
(2) 方法二
通过PreviousPageType指令
我们可以在原网页source.aspx的后台代码将控件的值封装为一些公有属性,如下所示。public string Name
{
get { return TextBox2.Text; }
}
public int Age
{
get { return int.Parse(TextBox3.Text); }
}
然后在目标网页中访问这些公共的属性,但是我们需要在目标网页destination.aspx的前面加上一条指令语句
<%@ PreviousPageType VirtualPath=”~/source.aspx” %>
添加这条指令之后,我们就可以这样做了
protected void Page_Load(object sender, EventArgs e)
{
if (Page.PreviousPage != null)
{
TextBox1.Text = "姓名:" + Page.PreviousPage.Name + Environment.NewLine + "年龄:" + Page.PreviousPage.Age.ToString();
}
}
这种方法的好处就是,我们不仅仅可以通过将将控件的值封装为一个公有属性,传递到另外一个页面中去,原页面中的其他公有属性也可以通过这样的方式去访问,灵活性比第一种更好!