我爱Aspx >> Asp.Net >> .net页面间的参数传递简单实例源页面代码:
把以下的代码添加到页面中
public string Name
{
get
{
return TextBox1.Text;
}
}
public string EMail
{
get
{
return TextBox2.Text;
}
}
然后调用Server.Transfer方法
private void Button1_Click
(object sender, System.EventArgs e)
{
Server.Transfer("anotherwebform.aspx");
}
目标页面代码:
private void Page_Load
(object sender, System.EventArgs e)
{
//create instance of source web form
WebForm1 wf1;
//get reference to current handler instance
wf1=(WebForm1)Context.Handler;
Label1.Text=wf1.Name;
Label2.Text=wf1.EMail;
}
在ASP.NET 2.0中启用了跨页面传送功能,其功能和用法在以后在做介绍!
页面之间传递值
方式1:
在接收页 的html代码里加上一行:
WebForm1 fp=(WebForm1)Context.Handler;
this.TextBox1.Text=fp.name; //name 是第一页的public变量
Context 提供对整个当前上下文(包括请求对象)的访问。您可以使用此类共享页之间的信息。
方式2:GET方式
在发送页
public int sum=0;
int i =int.Parse(this.TextBox1.Text)*2;
Server.Transfer("WebForm2.aspx?sum="+i);
接收页
this.TextBox1.Text=Request["sum"].ToString();
or this.TextBox1.Text=Request.Params["sum"].ToString();
this.TextBox1.Text=Request.QueryString["sum"];
方法3:全局变量
发送页:
Application["sum"]=this.TextBox1.Text;
Server.Transfer("WebForm2.aspx");
接收页:
this.TextBox1.Text=(string)Application["sum"];
Application实质上是整个虚拟目录中所有文件的集合,如果想在整个应用范围内使用某个变量值,Application对象将是最佳的选择
在这里用Session[""]的方法雷同
方法4:
发送页:
1.定义静态变量: public static string str="";
2. str=this.TextBox1.Text;
Server.Transfer("webform2.aspx");
接收页:
1.引入第一页的命名空间:using WebApplication1;
2 this.TextBox1.Text=WebForm1.str;
使用Form:
Querystring适合传递少量文本数据,比较灵活,不过它缺乏保密性,很多时候会在地址栏中显示出来,另外它也不适合传递大量数据和对象。Form正好相反,非常适合传递大量比较复杂的数据,例如大量的文本内容、文件、图形,等等。在ASP.NET 1.x的服务器表单中,服务器控件的事件处理都是用表单提交来实现的,不过所有的服务器表单提交都是提交到当前页面,如果想提交到另外一页可以用Server.Transfer(http://localhost/test.aspx)来实现。 ASP.NET 2.0有了新的武器,那就是跨页面提交,这可以在不使用Server.Transfer的情况下使服务器表单中的内容可以直接提交到另一个aspx页面。
先来看看跨页面传送是怎么使用的。
Default.aspx:
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server"><title>Untitled Page</title></head>
<body><form id="form1" runat="server">
<div><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br/>
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox> <br />
<asp:Button ID="Button1" runat="server" Text="提交到print.aspx"/>
<asp:Button ID="Button2" runat="server" Text="提交到store.aspx" PostBackUrl="~/store.aspx" /></div></form>
</body></html>
Default.aspx.cs:
public partial class _Default : System.Web.UI.Page{
protected void Page_Load(object sender, EventArgs e){
if (!IsPostBack){
TextBox1.Text = "第一页";
TextBox2.Text = "第二页";
}
else
Server.Transfer("print.aspx");
}
}
Print.aspx.cs:
public partial class Print : System.Web.UI.Page{
protected void Page_Load(object sender, EventArgs e){
if (this.PreviousPage != null){
TextBox tb=(TextBox)this.PreviousPage.FindControl("TextBox1");
Response.Write(tb.Text);
}
}
}
Store.aspx.cs
public partial class Store : System.Web.UI.Page{
protected void Page_Load(object sender, EventArgs e){
if (this.PreviousPage != null){
TextBox textBox=(TextBox)this.PreviousPage.FindControl("TextBox2");
if (textBox != null)
Response.Write(textBox.Text);
}
}
}
注意Button2的PostBackUrl属性,当Button2被按下以后,页面就被提交到store.aspx,然后Store.aspx的页面对象通过PreviousPage属性查找default.aspx的服务器控件和提交的内容。很简单,只要给提交按钮的PostBackUrl指定相应的URL,表单就会被自动提交到对应的页面。
这里发现按下Button1以后,页面同样会通过Server.transfer提交到Print.aspx,而且Print.aspx也同样可以通过PreviousPage查找default.aspx服务器表单中的内容。那么使用PostBackUrl和Server.Transfer来传送页面有什么不同呢? 回到Button1&2被按下的时刻,当Button1被按下,页面被提交给自己,然后根据页面生命周期的顺序,从PreInit事件开始,一步一步执行,直到到达Page_Load事件方法中的Server.Transfer操作,然后页面转到Print.aspx进行处理。当Button2被按下的时候,事情就不那么一样了。Button2具有PostBackUrl属性,Button2被按下以后就会被直接提交给Store.aspx,default.aspx不再按照页面生命周期的顺序执行。用MSDN上的话讲就是:Server.Transfer是一个基于服务器的方法,而PostBackUrl是基于客户端的。从这个意义上来讲,跨页面传送比Server.Transfer更加的便捷,有利于提高服务器的性能,减少了处理步骤。除开这一点,两者还是非常相似的,不过在ASP.NET 2.0中,跨页面传送显然是更好的选择。
如果要在后续页面中判断PerviousPage所引用的页面是通过跨页面提交而来的还是通过Server.Transfer方法传送而来的,可以通过IsCrossPagePostBack属性来进行判断:
if(PreviousPage != null){
if(PreviousPage.IsCrossPagePostBack == true) {
Response.Write("Cross-page post.");
}
}
else {
Response.Write("Not a cross-page post.");
}
除了源页面的服务器控件内容以外,还可以在目标页面中访问源页面对象的公有属性和成员变量。在能得到源页面的公有成员之间,必须首先在目标页面添加对源页面的强类型引用,在<%@ Page …%>下面加入一行: <%@ PreviousPageType VirtualPath="~/Default.aspx"%>。现在就可以在目标页面直接访问源页面的公有成员了。例如下面这个例子,显示了一个公有属性成员Birthdate。
Default.aspx.cs:
public DateTime Birthdate
{
get{ return new DateTime(1980,3,17);}
}
假设Default.aspx 通过跨页面传送提交给了Target.aspx,那么可以在target.aspx中访问Birthdate属性:
TextBox1.Text=this.PreviousPage.Birthdate.ToString();
跨页面传送的特性大概就是这些,有了跨页面传送,在处理数据提交的时候就又多了一种方法,更加的灵活。有人大概认为,使用跨页面提交会增加页面间的耦合程度,会增加数据传送量,使用querystring和传统的Form就够了。其实和传统的Form提交方法相比,页面间的耦合程度并没有提高。原因是当Form的内容提交以后,还是同样需要知道Input控件的ID才能访问对应的值,并且它有利于将不相关的功能页面分离。
举个例子来讲:现在有一个表单,里面填写了用户注册的信息,开发人员想为这个表单的内容做两件事,一件是将表单的内容存入数据库,另一件是将表单的内容发送给打印预览页面进行打印预览。ASP.NET 1.x中的方法是,提供两个服务器按钮控件,然后将表单内容提交给当前页面,当前页面进行条件判断,然后Server.Transfer到相应的页面进行处理。如果使用跨页面传送功能,同样先提供两个服务器按钮控件,可以为每个按钮指派对应的PostBackUrl,这样页面的内容就可以直接被提交到不同的页面,避免了在当前页面代码中出现更多的条件判断,减少了Server.Transfer的使用,不仅优化了设计也提高了效率。
Ҷƪл˵?
Asp.Net Pager分页控件[09-26]
在asp.net中做视频转换,将各种视..[09-26]
在ASP.NET中调用存储过程方法新解[09-25]
在C#中调用VC编写的dll库[09-11]
c# 屏幕取词的方法(载)[09-11]
vb.net封装组件成com的方法[09-11]
深入理解 ASP.NET 动态控件[09-11]
ASP.NET2.0 ObjectDataSource的使..[09-07]
ASP.NET如何调用MySQL的存储过程[09-07]
经验技巧分享--ASP.NET和Ajax应用..[09-06]