一、跨页信息的传递
-
使用查询字符串进行跨页信息传递
- 组装查询字符串:"main.aspx?userName=jack&pwd=123"
- 接收数据的方式:Request.QueryString["userName"];Request.QueryString["pwd"];
-
使用按钮的跨页提交进行信息传递
- 设置按钮的PostBackUrl属性为要跳转的页面,此时在客户端自动生成一段脚本,实现点击按钮的跳转操作,并且是以POST方式跳转
- 接收方式:
Request.Form["name"] TextBox txt=(TextBox)PreviousPage.FindControl("服务端ID")
-
在任意事件处理程序中进行跨页面发送
- Server.Transfer("目标页",true)
- 接收方式:如果保留源页面中的form数据或查询字符串数据,可以通过Request.Form["name"]或Request.QueryString["name"]
如果清空了源页面中form数据或查询字符串数据,可以这样接收:
TextBox txt=(TxtBox)PreviousPage.FindControl("服务端ID")
二、使用查询字符串进行跨页传递
-
查询字符串的写法
- http://域名//页面名?kkey1=value1&key2-value2…
- 注意:查询字符串本身是一个字符串,因此不需要考虑信息的类型,全部按字符串进行传递,接收后再进行类型转换即可
-
信息传递前的URL编码
- 为确保传递的信息都是允许的字符,在信息传递前必须进行URL编码
Protected void btnLogin_Click(object sender,EventArgs e)
{
String userName=Request.From["userNmae"];
//以post方式提交表单,获得表单中指userName的元素的值
String pwd=Request.Form["pwd'];
//以post方式提交表单,获得表单中指定pwd的元素的值
StuDBDataContext db=new StuDBDataContext()
admins admin=db.admins.FirstOrDefault(a=>a.userId==userName&&a.password==password)
if(admin==null)
Response.Write("<script>alert('用户名或密码错误');</script>");
Else
{
//先弹出脚本,再跳转,下面这两条语句实现不了
Response.Write("<script>alert('登录成功');</script>")
Response.Wirte("~/main.aspx?useName="+useName)
//使用客户端脚本实现
Respouse.Write("<script>alert('登录成功');window.location.href='main.aspx?nusrName………")
}
}
三、跨页面发送
- 使用按钮控件的PostBackUrl属性可使页面提交到其他页面中
- 使用Page的PreviousPage属性检查是否存在跨页提交前页面
- 可得到跨页前页面中控件的内容
- 使用Request进行信息接收与使用控件进行属性提取的不同
四、在任意事件处理程序中进行跨页面发送
由于只有实现了IButtonControl接口的控件才能够实现跨页提交
在任意服务器代码中可以使用以下方法进行跨页提交
this.Server.Transfer("页面Url",是否保留原页面的请求信息);
代码示例
跨页代码:this.Server.Transfer("b.aspx",true);
接收页面代码:
//提取上页面中控件中的信息
this.Response.Write(this.Response.Form["txtTest"]);
//提取URL参数中的信息
this.Response.Write("<br/>"+this.Response.QueryString["mode"]);
Protect void Page_Load(object sender,EventArgs e)
{
//第一种方式:使用Request.From[];接收传递来的值
//String userName=Request.Form["userName"]
//String pwd=Request.From["pwd"]
//lblMsg.Text="用户名:"+userName+"密码:"+pwd;
//第二种方式:PreviousPage:获得当前页面传递控件的页
Page page=PreviousPage;
If(page!=null)
{
//根据服务端ID搜索服务端控件,返回的是控件的基类型Control
TextBox txtuserName=(TextBox)page.FindControl("userName");
String userName=txtuserName.Text;
TextBox txtPwd=(TextBox)page.FindControl("pwd");
String pwd=txtPwd.Text;
lblMsg.Text="用户名:"+userName+",密码:"+pwd;
}
}