一、使用Querystring
QueryString是一种非常简单的传值方式,其缺点就是会把要传送的值显示在浏览器的地址栏中,并且在此方法中不能够传递对象类型的值。如果你想传递一个安全性不太重要或者是一个简单的数值时,用此方法最好不过了。下面的实例演示完成传值工作。
1、创建一个Web页面,命名为Default1.aspx
2、在新建的Default1中放置一个Button1,在放置两个TextBox1,TextBox2
3、Button按钮创建click事件代码如下:
protected void Button1_Click(object sender, EventArgs e)
{
string url;
url="Default2.aspx?name="+TextBox1.Text + "&pwd="+TextBox2.Text;
Response.Redirect(url);
}
4、新建另一个Web页面,命名为Default2.aspx
5、在Default2中放置两个Label1,Label2
在Default2.aspx.cs的Page_Load中添加如下代码:
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text=Request.QueryString["name"].ToString() ;
Label2.Text=Request.QueryString["pwd"].ToString();
}
运行,即可看到传递后的结果了。
二、使用Session变量
使用Session变量传值是一种最常见的方式了,此中方式不仅可以把值传递到下一个页面,还可以交叉传递到多个页面,直至把Session变量的值Remove后,变量才会消失。
演示示例如下:
1、创建一个Web页面,命名为Default1.aspx
2、在新建的Default1中放置一个Button1,在放置两个TextBox1,TextBox2
3、为Button1按钮创建Click事件代码如下:
protected void Button1_Click(object sender, EventArgs e)
{
Session["Name"]=TextBox1.Text;
Session["Pwd"]=TextBox2.Text;
Response.Redirect("Default2.aspx");
}
4、新建另一个目标页面命名为Default2 .aspx
5、在Default2页面中放置两个Label1,Label2标签。
在Default2.aspx.cs的Page_Load中添加如下代码:
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text=Session["Name"].ToString();
Label2.Text=Session["Pwd"].ToString();
// Session.Remove("Name");
// Session.Remove("Pwd");
}
运行后即可看到传递后的结果了。
三、使用Server.Transfer
演示示例如下:
1、创建一个Web页面,命名为Default1.aspx
2、在新建的Default1中放置一个Button1,在放置两个TextBox1,TextBox2
3、Button1按钮创建Click事件代码如下:
protected void Button1_Click(object sender, EventArgs e)
{
Server.Transfer("Default2.aspx");
}
4、在Default1.aspx.cs中创建两属性 Name, Pwd来存储TextBox1,TextBox2控件的值,代码如下:
public partial class Default1 : System.Web.UI.Page
{
public String Name
{
get
{
return this.TextBox1.Text;
}
}
public string Pwd
{
get
{
return this.TextBox2.Text;
}
}
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button2_Click(object sender, EventArgs e)
{
Server.Transfer("Default2.aspx");
}
}
5、新建另一个目标页面命名为Default2.aspx
6、在Default2中放置两个Label1,Label2 标签控件。
在Default2.aspx.cs的Page_Load中添加如下代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Default1 myver;
myver = (Default1)Context.Handler;
this.Label1.Text=myver.Name;
this.Label2.Text = myver.Pwd;
}
}
四、 使用Cookie对象变量
这个也是大家常使用的方法,与Session相比,Cookie是存放在客户端的,而session是存放在服务器端的。而且Cookie的使用要配合ASP.NET内置对象Request来使用。
1、在Default1.aspx创建一个文本框TextBox1和一个按钮控件Button1。
2、在Default1.aspx.cs中添加下如代码
protected void Button1_Click(object sender, EventArgs e)
{
HttpCookie cookie_name = new HttpCookie("myname");
cookie_name.Value = this.TextBox1.Text;
Response.AppendCookie(cookie_name);
Server.Transfer("Default2.aspx");
}
3、Default2.aspx.cs中代码如下:
protected void Page_Load(object sender, EventArgs e)
{
this.Label1.Text = Request.Cookies["myname"].Value.ToString();
}
五、 PostBackUrl()方法
1、 在页面default.1.aspx中的代码如下:
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" PostBackUrl="~/Default3.aspx"
Text="def3" />
</div>
</form>
</body>
2、在Default2.aspx.cs中的代码:
protected void Page_Load(object sender, EventArgs e)
{
if (PreviousPage != null)
{
TextBox textbox = (TextBox)this.PreviousPage.FindControl("TextBox1") ;
Response.Write(textbox.Text);
}
}
注意,PreviousPage是Page类的一个新属性,PreviousPage返回一个Page对象,这个对象中的控件可能使用FindControl()方法来方问。
六、利用一个类来传递页面的值
在Asp.net中创建一类,并取一个名字,如UserInfo,系统会自动将该类放在App_Code文件夹中。
其中类的代码如下:
public class UserInfo
{
public UserInfo()
{
//
//TODO:在此处添加构造函数逻辑
//
}
private TextBox textName;
public TextBox TextName
{
get
{
return textName;
}
set
{
textName = value;
}
}
private TextBox textPwd;
public TextBox TextPwd
{
get
{
return textPwd;
}
set
{
textPwd = value;
}
}
private TextBox textEmail;
public TextBox TextEmail
{
get
{
return textEmail;
}
set
{
textEmail = value;
}
}
}
2、在页面Default1.aspx中创建三个文本框和一个按钮,TextBox1,TextBox2,TextBox3三个文本框的ID分别为:TextName,TextPwd ,TextEmail代码见下面:
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="TextName" runat="server"></asp:TextBox>
<asp:TextBox ID="TextPwd" runat="server"></asp:TextBox>
<asp:TextBox ID="TextEmail" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" οnclick="Button1_Click" Text="Button" />
<br />
</div>
</form>
</body>
3、在Default1.aspx.cs中的代码如下,参见上面和下面控件ID蓝色名称:
public UserInfo myyInfo
{
get
{
UserInfo info = new UserInfo();
info.TextName =TextName;
info.TextPwd =TextPwd;
info.TextEmail =TextEmail;
return info;
}
}
protected void Button1_Click(object sender, EventArgs e)
{
this.Button1.PostBackUrl = "~/Default2.aspx";
}
4、下面列出目标页面Default2.aspx上关键代码,
在Default2.aspx文件的Page指令后面添加PreviousPageType指令,如下所示:
<%@ Page Language="C#" CodeFile="Default5.aspx.cs" Inherits="Default5" %>
<%@ PreviousPageType VirtualPath="~/Default1.aspx" %>
5、在目标页面上创建三个标签控件Label1,Label2,Label3,分别用于显示上一个页面传过来的用户姓名,密码和电子邮件地址。
6、在Defautl2.aspx.cs中的代码如下:
protected void Page_Load(object sender, EventArgs e)
{
UserInfo myInfo = PreviousPage.myyInfo;
Label1.Text = myInfo.TextName.Text;
Label2.Text = myInfo.TextPwd.Text;
Label3.Text = myInfo.TextEmail.Text;
}
asp.net 汉字传参问题
传参:
url="default1.aspx?f=G&v="+escape(v);
调用:
Request.QueryString["v"]