⑴ 列举ASP.NET 页面之间传递值的几种方式
1、使用QueryString变量
QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中。如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法。但是对于传递数组或对象的话,就不能用这个方法了。下面是一个例子:
a.aspx的C#代码
private void Button1_Click(object sender, System.EventArgs e)
{
string s_url;
s_url = "b.aspx?name=" + Label1.Text;
Response.Redirect(s_url);
}
b.aspx中C#代码
private void Page_Load(object sender, EventArgs e)
{
Label2.Text = Request.QueryString["name"];
}
2、Session传值
这种方法将每份数据存储于服务器变量中,可以传递比较多的数据,并且安全性较高,所以常用于用户身份的验证功能中。不过,Session变量如果存储过多的数据会消耗过多的服务器资源,编程者在使用时应该慎重,其使用方法如以下代码所示。
Session["SessionValue"] = “ATI”;
//也可以用索引存储
Session[0] = “ATI”;
//在其他页面的服务器端方法中取值方式为:
string str = Session["SessionValue"].ToString();
//也可以用索引获取
string str = Session[0].ToString();
Session的可在应用程序的多个页面中以名称/值对的方式共享,直到浏览用户关闭自己的浏览器或者服务器Session超时(可设置,默认为20分钟)。
3、<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
一个带有runat="server"的控件才是后台.cs能够获得到的,唯一标识符是ID,通过ID获取,大写可以和html的id区别开来好看(虽然这个ID可以写成id);asp.net自带的控件runat="server"必须写。
因为其实TextBox控件在浏览器源码查看中也是input,但是如果不加runat="server"声明它是asp.net服务器控件,不会被解析成input给浏览器认识,浏览器变成文本框等等展现出来。
(1)服务器端不同页面之间怎么传值扩展阅读:
使用Cookie对象变量
这个也是大家常使用之方法,与Session一样,其是什对每一个用户而言之,但是有个本质之区别,即Cookie是存放在客户端之,而session是存放在服务器端之。而且Cookie之使用要配合ASP.NET内置对象Request来使用。
a.aspx之C#代码
private void Button1_Click(object sender, System.EventArgs e)
{
HttpCookie cookie_name = new HttpCookie("name");
cookie_name.Value = Label1.Text;
Reponse.AppendCookie(cookie_name);
Server.Transfer("b.aspx");
}
b.aspx中C#代码
private void Page_Load(object sender, EventArgs e)
{
string name;
name = Request.Cookie["name"].Value.ToString();
}
⑵ 四种跨页面传值方式有何差异,各自使用于什么情况
不同的页面间传值使用很普遍,非常重要,传值方式有四种分别是cookie,session,sendRedirect和超链接,隐藏表单
1.cookie主要用于记录用户的一些信息,例如记录用户的登录信息使用户一段时间内不用登录,它有服务器创建,并放在客户端(用户登录时的电脑上(一般可以在浏览器工具——》Internet选项——》点击第一个设置——》查看文件在这里可以找到上网的记录,包括一些小的视频和cookie,从这一点来看cookie并不安全,可以在cookie看到密码)),当使用时,服务器就会从电脑上获取,然后验证,一个用户有一个cookie,而且cookie的存在时间不受任何影响,关机都不会影响cookie。
2.session是存放在服务器端的数据,每当双击打开浏览器时就会有一个session,也就是说每一个浏览器一个session,session的使用时间是受使用影响的,当关机时候session就不会再存在,当session没有到期时如果使用,session就会重新计时。可以用于判断用户的合法(是否通过用户名,密码登陆的),传递用户名(sendRedirect是明文传值,值会再地址栏显示出来,不能用于传重要数据,例如密码),jsp页面的session与servlet中的session是共用的。
3.sendRedirect或超链接是转向某页面并可以传值例如res.sendRedirect("logincl?username="+name1+"&psw="+pass1);在转向的页面通过下面的语句获取值
String u = req.getParameter("username");String p = req.getParameter("psw");
超级链接:("<a href=welcome?pagenow=" + i + ">" + i+ "</a>");
接收值:String pagenow = req.getParameter("pagenow");
可以用于传错误信息等保密性不是很强的信息
4.隐藏表单
pw.println("<input type=hidden name=sex value=男<br>");
在转向的页面可以用下面的语句接收
String s=req.getParameter("sex");
⑶ 如何在页面和服务器间传值
楼主说的是怎么在页面和服务器之间传值,一个个都说ajax,是,没错,你们都学过很长时间的web编程了,用ajax进行异步通信貌似很火,但是楼主很显然是说基础的传值,你们这样不就是显摆么?
lymeng520更搞笑,到网上摘了点ajax只是就来答题了!!
既然楼主是来java板块,那么我说下jsp,servlet等基础传值方法。
比如你的一个页面(html,jsp啊什么的)上要在人点击一个按钮之后将输入的信息传给后台,那么首先要一个表单Form.如<form id="xxx" name="xxx" action="action.jsp">这个意思就是后台处理程序是action.jsp这个文件,当然了,也可以是servlet。用一个form包含一个提交按钮,那么点击这个按钮之后就会自动将他所属于的form提交。
如:
<form id="xxx" name="xxx" action="action.jsp">
<!-- 这里放一些你的信息输入栏,比如输入名字啊什么的-->
<input type="text" name="userName" id="userName"><!--这里要用户输入一些名字信息-->
<input type="submit" value="提交">
</form>
这就是一个最最基础的传值给后台的代码片段。
你在action.jsp中就可以用request.getParameter("userName");来获取别人填写的名字信息.userName就是指<input type="text" name="userName" id="userName">中的name属性的值,用request.getParameter("userName");就是获得了这个文本框内的东西了。
另一种常见方式就是session之间传值,比如你一个jsp页面中来个session.setAttribute("a",new String("aaa")),那么当这个jsp页面提交给后台处理程序(可能是一个jsp或一个servlet程序),那么再后台程序里面就可以用String aa=session.getAttribute("a").toString();来将之前那个Jsp页面中所设定的属性a的值"aaa"获取并赋给后台程序中定义的变量aa中。
当然,以上都是很基础的传递方式,楼主会了这些再看看ajax来进行异步通信那样才好些,如果什么都还不会就直接搞ajax那样不好。
⑷ 关于asp.net不同页面传递数值的问题
传值问题的话,可以参照:
跨页面传值:
一.使用QueryString变量传值:该变量用于传送一个或多个安全性不高或结构简单的数组。
例如:a.aspx:
前台:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="a6.aspx.cs" Inherits="a6aspx" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
</div>
</form>
</body>
</html>
后台:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class a6aspx : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
string url;
url = "b6.aspx?name="+TextBox1.Text;
Response.Redirect(url);
}
}
b.aspx:
前台:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="b6.aspx.cs" Inherits="b6" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</div>
</form>
</body>
</html>
后台:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class b6 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text=Request.QueryString["name"];
}
}
二.使用application变量,作用范围是整个全局,对所有用户都有效
Application用来保存所有用户共用的信息
在Asp时代,如果要保存的数据在应用程序生存期内不会或者很少发生改变,那么使用Application是理想的选择。但是在Asp.net开发环境中我们把类似的配置数据放在Web.config中。
如果要使用Application 要注意的是所有的写操作都要在Application_OnStart事件中完成(global.Asax),尽管可以使用Application.Lock()避免了冲突,但是它串行化了对Application的请求,会产生严重的性能瓶颈。
不要使用Application保存大数据量信息
代码:Application[“UserID”]=”test”;
String UserName=Application[“UserID”].ToString();
三.使用session变量:作用于用户个人,易导致服务器内存耗尽。
Session用来保存每一个用户的专有信息
Session的生存期是用户持续请求时间加上一段时间(一般是20分钟左右)
Session信息是保存在Web服务器内存中的,保存数据量可大可小
Session超时或者被关闭将自动释放数据信息
由于用户停止使用应用程序之后它仍在内存中存留一段时间,因此这种方法效率较低
代码:Session[“UserID”]=”test”;
String UserName=Session[“UserID”].ToString();
四.使用cookie变量:须配合request来使用。
Cookie用来保存客户浏览器请求服务器页面的请求信息
我们可以存放非敏感的用户信息,保存时间可以根据需要设置
如果没有设置Cookie失效日期,它的生命周期保存到关闭浏览器为止
Cookie对象的Expires属性设置为MinValue表示永不过期
Cookie存储的数据量受限制,大多数的浏览器为4K因此不要存放大数据
由于并非所有的浏览器都支持Cookie,数据将以明文的形式保存在客户端
代码:Resopnse.Cookies[“UserID”]=”test”;
String UserName= Resopnse.Cookies [“UserID”].ToString();
五.使用server.transfer方法传值:使用该方法将流程从当前页面引导到另一页面中,新页面使用前一页面的应用流。
六.使用Post方法传值:易出现传送的参数缺少存储,刷新B页面时导致A页面传送过来的内容丢失,出现“未将对象引用设置成对象的实例”的错误。
七.使用@PreviousPageType:(可隐藏Url中的参数)
该指令是.net 2.0中的一个新指令,用于处理asp.net 2.0 提供的跨页面传送功能,用于批定跨页面的传送过程起始于哪个页面。
TypeName:设置回送时的派生类名;
VirtualPath:设置回送时所传送的页面的地址;
八.表单提交:
九.PostbackUrl:在.net中仅有button linkbutton imgbutton有postbackurl可用来跨页面传值。
十.静态属性传值:通过继承类实现调用其他类的方法。
public static int aaa;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
aaa = 123;
Response.Redirect("static_b.aspx");
}
。。。。。。。。。
public partial class b4 : a4
{
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = a4.aaa.ToString();
}
}
本页面传值:
一.cache传值:
Cache用于在Http请求期间保存页面或者数据
Cache的使用可以大大的提高整个应用程序的效率
它允许将频繁访问的服务器资源存储在内存中,当用户发出相同的请求后
服务器不是再次处理而是将Cache中保存的数据直接返回给用户
可以看出Cache节省的是时间—服务器处理时间
Cache实例是每一个应用程序专有的,其生命周期==该应用程序周期
应用程序重启将重新创建其实例
注意:如果要使用缓存的清理、到期管理、依赖项等功能必须使用Insert 或者Add方法方法添加信息
代码:Cache[‘”ID”]=”yiner”;或者Cache.Insert(“ID”,”test”);
String ID =Cache[“ID”].ToString();
二.ViewState传值:
ViewState用来保存用户的状态信息,有效期等于页面的生命周期
可以保存大量数据但是要慎用,因为会影响程序性能
所有的Web服务器控件都是用ViewState在页面PostBack期间保存状态
不需要则关闭@page 里面设置EnableViewState=false
代码:ViewState[‘”ID”]=”yiner”;
String ID =ViewState[“ID”].ToString();
三.Hidden传值:
Hidden控件属于Html类型的服务器控件,始终处于隐藏状态
每一次提交的时候它会和其他服务器控件一起提交到服务器端
代码如下:Hidden.Value=”king”;
string id=Hidden.Value; 要使用Runat=server
如果功能问题,及时联系,帮你解决。。。。。。
如果是其他问题,随时联系我,乐意解决。。。。。。
⑸ 如何在页面之间传递变量
(1)Session
(2)Cookie
(3)Application
(4)URL地址中的参数
(5)通过隐藏字段来传递数据
(6)Server.Transfer
(7)通过序列化对象
(8)........
下面就分别一一介绍:
(1)使用Session
session对象是用来记录浏览器端的变量,是个别浏览器端专用的变量,对于每一个浏览器访问时都会自动产生一个seseion对象,该对象提供一个存储场所,用来存储仅仅对该访问者在会话的活动期间打开的网页可用的变量和对象。这样就用可以用来在Web间传递专对单个浏览器端使用的数据。其定义方法:session(“变量名”)=数值
如:Session["testTransmitVaraint"] = "testSession";
session对象所定义的变量只是浏览器端的专用变量,所以适用于局部会话间的网页数据传递。
(2)使用Cookie
cookie是在浏览页面时Web服务器在浏览器端所写入的一些小文件,cookie是存放在浏览器端本机磁盘上,而不是存放在服务端的。可以在发送数据时写入cookie,接收时读取cookie完成数据在Web页面间的传送。
发送页面
HttpCookie cookie = new HttpCookie("testCookie");
cookie.Value = TextBox1.Text;
Response.SetCookie(cookie);
取Cookie页
HttpCookie cookie = Request.Cookies["testCookie"];
Response.Write("<br>HttpCookie = " + cookie.Value);
(3)使用Application
application对象是用来记录整个网站信息的,是记录不同浏览器端共享的变量,无论有几个浏览者同时存取网页,都只会产生一个application对象实例。用户可以通过定义application整站共享变量来实现网页间的数据传递。其定义方法是:application(“变量名”)=数值
如:Application["testApplication"] = "testApplication";
application对象所定义的变量对于所有浏览端都是可见的,所以其使用场合是所有浏览端共享的全局数据传递。
(4)使用URL地址中的参数
URL方式是实现Web间数据传递最基本的方法,操作简单,可很方便地实现不同Web页面间的数据传递,但其安全性比较差。将要传递的数据附加在网页地址(URL)后面进行传递。如:http://192.168.0.1/testweb.aspx?username=liming,其中?后面所跟着的字符串便是传递的数据,=前的是变量名,=后面是数值,可以使用request对象来获取传递的数据。如:request(“username”)。这种方法在传递数据过程中其数据内容在URL栏中是显示的,用户能看到提交的内容。
以上四种方法的适用范围:简单变量如基本的数据类型的数据
(5)使用隐藏字段来传递数据
通过在网页上制作表单交互区域,用户在浏览器端输入数据,然后通过form提交到服务器,在提交后的接受form数据的页面里就可以接收到相应数据,即form的action页面中可以使用request对象来接收所传递的数据。
如:
发送页面:
}
接收页面:request(“UserID”)
利用form页面的文本框来接收用户数据的输入,通过submit按钮提交后在targetweb页面中使用request来接收数据。
适用范围:基本的数据类型的数据,不宜传递对象变量等复杂的数据
(6)使用Server.Transfer
这个方法稍微复杂一点,但在页面间值传递中却是特别有用的,使用该方法你可以在另一个页面以对象属性的方式来存取显露的值,当然了,使用这种方法,你需要额外写一些代码以创建一些属性以便可以在另一个页面访问它,但是,这个方式带来的好处也是显而易见的。总体来说,使用这种方法是简洁的同时又是面向对象的。
使用这种方法的整个过程如下:
1,在页面里添加必要的控件
2,创建返回值的Get属性过程
3,创建可以返回表单的按钮和链接按钮
4,在按钮单击事件处理程序中调用Server.Transfer方法转移到指定的页面
5,在第二个页面中,我们就可以使用Context.Handler属性来获得前一个页面实例对象的引用,通过它,就可以使用存取前一个页面的控件的值了
此方法的适用范围:简单变量如基本的数据类型的数据,复杂变量如结构、类变量、DataSet、DataTable等
具体的事例,请见原代码。
此方法的适用范围:简单变量如基本的数据类型的数据,复杂变量如结构、类变量、DataSet、DataTable等
(7)通过序列化对象
序列化是指将对象实例的状态存储到存储媒体的过程。在此过程中,先将对象的公共字段和私有字段以及类的名称(包括类所在的程序集)转换为字节流,然后再把字节流写入数据流。在随后对对象进行反序列化时,将创建出与原对象完全相同的副本。
在面向对象的环境中实现序列化机制时,必须在易用性和灵活性之间进行一些权衡。只要您对此过程有足够的控制能力,就可以使该过程在很大程度上自动进行。例如,简单的二进制序列化不能满足需要,或者,由于特定原因需要确定类中那些字段需要序列化。
为什么要使用序列化?最重要的两个原因是:将对象的状态保存在存储媒体中以便可以在以后重新创建出完全相同的副本;按值将对象从一个应用程序域发送至另一个应用程序域。例如,序列化可用于在ASP.NET 中保存会话状态,以及将对象复制到 Windows 窗体的剪贴板中。它还可用于按值将对象从一个应用程序域远程传递至另一个应用程序域。
关于序列化对象更详细的介绍,请参见微软的“.NET 中的对象序列化”
(8)结束语
上述介绍的是网页间数据传递的常用方法,各有千秋。其中URL方式和form方式实现方法简单,可实现网页间的简单数据传递,一般为字符串类型,其特点是安全性差,而且必须是连续访问两页面间数据传递。Cookie只能存放string类型的数据,如果想要存放更为复杂的数据类型,那么必须先将其转换为string类型。Application对象和Session对象操作相对复杂些,浏览量非常大的网页使用时应适量,而且使用结束后尽量清除,否则大量使用有可能会导致服务器的瘫痪。Session变量的安全性较高,可传递专用浏览端数据。具体应用决定了数据传递方式的选择,合理数据传递方式选择是Web页面的设计中的关键考虑因素。
⑹ 两个HTML页面如何传递数据
一.通过表单简单的传输数据,利用js代码接收传递的数据,注意method属性要设为get。
<form id="form" action="data.html" method="get"></form>//action的值是你的目的html
在你的目的html中可通过url接收传递的数据,并将数据保存在一个对象中。
<script type="text/javascript" charset="utf-8">
window.onload = function() {
var url = window.location.search;//location.search是从当前URL的?号开始的字符串
console.log(url);
var Request = new Object();
if (url.indexOf('?') != -1) {
var a = '';
var str = url.substr(1) //去掉?号
strs = str.split('&');
for (var i = 0; i < strs.length; i++) {
a = strs[i].split('=')[0];
Request[a] = decodeURI(strs[i].split('=')[1]);//解码,生成获取信息的对象
console.log(Request[a]);
}
}
console.log(Request);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
注意这种方式传递中文数据需要用decodeURIComponent()或decodeURL()函数解码,unescape()现在似乎已经淘汰了。
然后利用document.write()或innerHTML等方法或函数将数据显示在网页上。此种方法适合自己平时写JS的小练习,此种方法无法将数据保存下来。
2.使用Cookie传递参数
下面是简单的实例,a页面保存Cookie,b页面读取。
a.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>a</title>
<script type="text/javascript">
/***
* @param {string} cookieName Cookie名称
* @param {string} cookieValue Cookie值
*/
function SetCookie(cookieName,cookieValue) {
/*设置Cookie值*/
document.cookie = cookieName + "=" + escape(cookieValue)
}
function login() {
var username = $("user").value;
if(username.length>0 && username) {
SetCookie("username", username);
/*跳转到b.html页面*/
document.location = "b.html";
}
}
function $(id) {
return document.getElementById(id);
}
</script>
</head>
<body>
<div id="main">
<div><span>请输入你的名字</span><input type="text" id="user" /></div>
<div>
<input type="button" onclick="login()" value="提交" />
</div>
</div>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
b.html
<html>
<head>
<meta charset="UTF-8">
<title>b</title>
<script type="text/javascript">
/***
*读取指定的Cookie值
*@param {string} cookieName Cookie名称
*/
function ReadCookie(cookie_name){
//判断是否存在cookie
if (document.cookie.length > 0){
//查询cookie开始部分
cookie_start = document.cookie.indexOf(cookie_name + "=")
//如果存在
if (cookie_start != -1){
//计算结束部分
cookie_start = cookie_start + cookie_name.length + 1
cookie_end = document.cookie.indexOf(";", cookie_start)
//如果已经是最后一个cookie值,则取cookie长度
if (cookie_end == -1) {
cookie_end = document.cookie.length
}
//获取cookie值,unescape对特殊字符解密
return unescape(document.cookie.substring(cookie_start,cookie_end))
}
}
//其它情况返回空
return ""
}
function $(id) {
return document.getElementById(id);
}
function init() {
var username = ReadCookie("username");
if(username && username.length>0) {
$("msg").innerHTML = "<h1>欢迎光临," + username + "!</h1>";
} else {
$("msg").innerHTML = "<a href='a.htm'>请录入名字</a>";
}
}
</script>
</head>
<body onload="init()">
<div id="msg"></div>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
此种方法也是适合自己平时写JS的小练习,此种方法无法将数据保存下来。
3.通过web服务器利用前后端交互
前后端交互又可分为表单交互和url参数交互。表单交互是指在HTML中创建一个表单,用户填写表单后提交给服务器,服务器收到表单后返回处理结果。其大致构成如下:
URL参数经常用于浏览器向服务器提交一些请求信息。其流程图大致如下:
例如利用nodejs与json文件相连接,实现对本地json数据的增删改查,在不同网页间传递数据。
————————————————
版权声明:本文为CSDN博主“想躺”的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_41209003/article/details/103739371
⑺ 如何通过javascript在两个页面之间传值
第一个页面中有两个图片,当点击的时候能在第二个页面中获得它的属性值()通过js进行传值:
第一个页面:
[html]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script type="text/javascript">
function test(){
var img1= document.getElementById("img1");
var img2= document.getElementById("img2");
//获得alt的属性
var parm1=img1.getAttribute("alt");
var parm2=img2.getAttribute("alt");
//url
img1.onclick=function(){
var myurl="test2.html"+"?"+"parm1="+parm1;
window.location.assign(myurl);
}
img2.onclick=function(){
var myurl="test2.html"+"?"+"parm2="+parm2;
window.location.assign(myurl);
}
}
</script>
</head>
<body onload="test();">
<img src="1.jpg" id="img1" alt="myimg1">
<img src="2.jpg" id="img2" alt="myimg2">
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script type="text/javascript">
function test(){
var img1= document.getElementById("img1");
var img2= document.getElementById("img2");
//获得alt的属性
var parm1=img1.getAttribute("alt");
var parm2=img2.getAttribute("alt");
//url
img1.onclick=function(){
var myurl="test2.html"+"?"+"parm1="+parm1;
window.location.assign(myurl);
}
img2.onclick=function(){
var myurl="test2.html"+"?"+"parm2="+parm2;
window.location.assign(myurl);
}
}
</script>
</head>
<body onload="test();">
<img src="1.jpg" id="img1" alt="myimg1">
<img src="2.jpg" id="img2" alt="myimg2">
</body>
</html>
第二个页面:
[html]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>test2</title>
<script type="text/javascript">
function getvalue()
{
///test2.html?parm1=myimg1&parm2=myimg2
//获得第一个属性
var url=location.href;
var tmp1=url.split("?")[1];
var tmp2=tmp1.split("&")[0];
var tmp3=tmp2.split("=")[1];
var parm1=tmp3;
//获得第二个属性
/*
var tmp9=url.split("?")[1];
var tmp4=tmp9.split("&")[1];
var tmp5=tmp4.split("=")[1];
var parm2=tmp5;
*/
var inhtml= document.getElementById("inhtml");
inhtml.innerHTML=parm1;
//alert(parm1);
}
</script>
</head>
<body onload="getvalue();">
<h2>测试</h2>
<span id="inhtml"> </span>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>test2</title>
<script type="text/javascript">
function getvalue()
{
///test2.html?parm1=myimg1&parm2=myimg2
//获得第一个属性
var url=location.href;
var tmp1=url.split("?")[1];
var tmp2=tmp1.split("&")[0];
var tmp3=tmp2.split("=")[1];
var parm1=tmp3;
//获得第二个属性
/*
var tmp9=url.split("?")[1];
var tmp4=tmp9.split("&")[1];
var tmp5=tmp4.split("=")[1];
var parm2=tmp5;
*/
var inhtml= document.getElementById("inhtml");
inhtml.innerHTML=parm1;
//alert(parm1);
}
</script>
</head>
<body onload="getvalue();">
<h2>测试</h2>
<span id="inhtml"> </span>
</body>
</html>
⑻ ASP.NET页面之间传递值的几种方式
URL、Session、Cookies、Server.Transfer、Application和跨页面传送。
【分析】
本题考查面试者对ASP.NET中多页面传值的理解是否全面。因为ASP.NET的页面表单提交到自身,完成回传的功能,所以默认情况下不能使用POST方式进行多页面传值。关于这些传值方式的分析如下所示。
1.URL传值
这是经典的传值方式,这种方法的使用非常简单,不过所传递的值是会显示在浏览器的地址栏上的,而且不能传递对象。所以这种方法一般用于传递的值少且安全性要求不高的情况下。在*.aspx页面开发中可以使用超级链接文本进行传值,如以下代码所示。
<asp:HyperLink runat="server" ID="HpLink"
NavigateUrl="~/GetValues.aspx?urlvalue1=intel&urlvalue2=amd">URL传值</asp:HyperLink>
以上链接文本将页面跳转到GetValues.aspx页面,并且通过URL传递urlvalue1变量和urlvalue2变量,其值分别为intel和amd。在*.cs的服务器端方法中也可以调用HttpResponse对象的Redirect方法,将浏览器端重定向到新页面并通过URL传值,如以下代码所示。
Response.Redirect(“~/GetValues.aspx?urlvalue1=intel&urlvalue2=amd”);
2.Session传值
这种方法将每份数据存储于服务器变量中,可以传递比较多的数据,并且安全性较高,所以常用于用户身份的验证功能中。不过,Session变量如果存储过多的数据会消耗过多的服务器资源,编程者在使用时应该慎重,其使用方法如以下代码所示。
Session["SessionValue"] = “ATI”;
//也可以用索引存储
Session[0] = “ATI”;
//在其他页面的服务器端方法中取值方式为:
string str = Session["SessionValue"].ToString();
//也可以用索引获取
string str = Session[0].ToString();
Session的可在应用程序的多个页面中以名称/值对的方式共享,直到浏览用户关闭自己的浏览器或者服务器Session超时(可设置,默认为20分钟)。
3.Cookie传值
Cookie是一种比较特殊的数据存储方式,因为这种方式将数据存储于浏览用户的电脑中,以文本文件的形式存在于磁盘中。这种方式非常有意思,很多登录系统就是利用Cookie实现用户自动登录。即用户登录一次的登录信息将被写入到用户电脑的Cookie文件中,下次登录时,网站自动读取该Cookie完成身份验证。通过Cookie传递数据虽然很方便,保存时间可以自由设置,但是安全性不高,编程者不应过于依赖Cookie,而应采用结合的方式完成敏感数据的存储。
ASP.NET中操作Cookie的主要类型位于System.Web命名空间下,分别为HttpCookie、HttpResponse以及HttpRequest。HttpCookie可建立和操作独立Cookie的安全类型,访问HttpResponse和HttpRequest的Cookies属性可以获取HttpCookieCollection集合对象,以读取或添加HttpCookie对象。添加Cookie的方法如以下代码所示。
//创建一个HttpCookie 对象,向构造函数传递名称值
HttpCookie ck = new HttpCookie("CookieValue");
//设置ck的“Value”属性(值)
ck.Value = “Cookie值”;
//设置ck的过期时间为当前时间加上360s,即6分钟后失效
ck.Expires = DateTime.Now.AddSeconds(360);
//设置ck有效范围(域限制)
ck.Domain = "www.google.cn";
//将ck添加至HttpCookieCollection对象
Response.Cookies.Add(ck);
//也可为以下方法添加
//Response.AppendCookie(ck);;
读取用户的Cookie则更为简单,只需根据名称读取HttpCookieCollection集合对象中的子项即可,如以下代码所示。
string str = Request.Cookies["CookieValue"].Value;
除此之外,还可以利用一个HttpCookie存储多个名称/值对形式的Cookie信息,如以下代码所示。
HttpCookie ck = new HttpCookie("CookieValue");
//以名称/值对的方式添加多个Cookie信息
ck.Values.Add("value1", “one”);
ck.Values.Add("value2", "two");
//设置ck的过期时间为当前时间加上100年,即100年后失效
ck.Expires = DateTime.Now.AddYears(100);
//通过以下两种方法添加
Response.Cookies.Add(ck);
//Response.AppendCookie(ck);
读取这些Cookie如以下代码所示。
string str = "值1:"+Request.Cookies["CookieValue"].Values["value1"];
str += "值2:" + Request.Cookies["CookieValue"].Values["value2"];
说明:多数浏览器支持最多可达4096字节的Cookie,如果要将为数不多的几个值保存到用户计算机上,浏览器还限制了每个站点可以在用户计算机上保存的Cookie数量。大多数浏览器只允许每个站点保存20个Cookie。如果试图保存更多的Cookie,则最先保存的Cookie就会被删除。还有些浏览器会对来自所有站点的Cookie总数作出限制,这个限制通常为300个。用户可以设置自己的浏览器,拒绝接受Cookie,这种情况下只能结合其他的数据存储方式。
4.Server.Transfer传值
这个方法的步骤相对较多,使用该方法编程者可以在另一个页面以公开对象属性的方式来存取值,使用这种方法是面向对象的。该方法的代码编写并不复杂,首先通过定义一个public权限的属性,该属性可返回所需传递的值。然后在第两个页面中,使用Context.Handler属性来获得前一个页面实例对象的引用,即可通过访问自定义的属性获取需要的值。
假设SendValues.aspx页面为传递数据的页面,在SendValues.aspx.cs的页面类中定义一个public属性,通过get直接返回需要传递的值(可为页面中某个服务器控件的属性值)。
public string TransferData
{
get
{
return "VIA";
}
}
在SendValues.aspx.cs的某个方法(如Button控件的Click事件处理方法)中调用HttpServerUtility对象的Transfer方法,如以下代码所示。
Server.Transfer("~/GetValues.aspx");
假设GetValues.aspx为第二个页面,在GetValues.aspx.cs的Page_Load方法中接收前一个页面所传递的值,方法如以下代码所示。
//定义SendValues类型的变量SV_Page
SendValues SV_Page;
//访问HttpContext对象的Handler属性,将值转换为SendValues类型,引用赋值给SV_Page
SV_Page = (SendValues)Context.Handler;
//SV_Page即为SendValues.aspx页面类的对象,直接获取其TransferData属性值
string str = SV_Page.TransferData;
可见,这种方法对于有面向对象基础的编程者而言非常容易理解。不过页面间如果需要传递数量比较多的值,这种方法需要定义过多的属性,略显繁杂。编程者还可以直接使用HttpContext对象的“Iterms”属性添加多项名称/值对的数据,在SendValues.aspx.cs调用HttpServerUtility对象的Transfer方法的某个方法中,修改代码如下所示。
Context.Items["value1"] = "one";
Context.Items["value2"] = "two";
在GetValues.aspx.cs的Page_Load方法中接收前1个页面所传递的值,修改代码如以下代码所示。
string str = "值1:" + Context.Items["value1"].ToString();
str += "值2:" + Context.Items["value2"].ToString();
5.Application传值
严格地说应该是通过HttpApplication对象在服务器端生成一个状态变量来存储所需的信息,该HttpApplication对象变量的可用范围覆盖整个WEB应用程序。所以该对象一般存储一些要公布的信息,如在线人数等,而对于那些涉及用户个人的敏感数据则不用这种方法存储。HttpApplication对象有两个常用的方法,即Lock和UnLock方法,可用于处理多个用户对存储在Application变量中的数据进行写入的问题。Lock方法锁定全部的Application变量,从而阻止其他用户修改Application对象的变量值,UnLock方法则解除对HttpApplication对象变量的锁定。通过HttpApplication对象传值的方法和Session比较相似,在页面类的某个方法中编写代码如下所示。
Application["a"] = "微软公司";
Application["b"] = "苹果公司";
Application["c"] = “Mac”;
以上代码很轻松地将三个字符串值保存在HttpApplication对象的变量中了,并且这些变量是整个程序共享的,其他用户通过相应的页面同样可以获取。获取这些变量的方法如以下代码所示。
Application.Lock();
string str = "值1:" + Application["a"];
str += "值2:" + Application["b"];
str += "值3:" + Application["c"];
Application.UnLock();
注意:虽然使用方式和Session相似,但是Session是对于每个单独的用户,当该用户关闭浏览器,则Session失效。HttpApplication对象存储的变量是针对所有访问程序的用户,即使有用户关闭了浏览器,变量的值不会丢失。
6.跨页面传送
跨页面传送和调用HttpServerUtility对象的Transfer方法有相似之处,不过效率更高。因为调用HttpServerUtility对象的Transfer方法是基于服务器的方法,而跨页面传送是基于浏览器端的。这个方法主要是设置控件的“PostBackUrl”属性,使该控件(如Button)操作后转向指定页面,并且这个指定页面可以直接获取前一个页面的所有控件对象及其属性值。假设第一个页面为SendValues.aspx,在该页面中(非*.cs代码文件)添加两个控件,设置如以下代码所示。
<asp:TextBox runat="server" ID="PbValue" Text="Geforce TX280"></asp:TextBox>
<asp:Button runat="server" ID="btn6" Text="跨页面传送方式" PostBackUrl="~/GetValues.aspx" />
以上代码中,TextBox控件的“Text”属性为“Geforce TX280”,这是所需要传送的值。而Button控件的“PostBackUrl”属性指定了GetValues.aspx页面,该页面即可接收所需传递的值。在GetValues.aspx.cs的Page_Load方法中,编写以下代码。
//PreviousPage为向当前页面传输控件的页面
if (PreviousPage != null)
{
//从PreviousPage容器中搜索“ID”为PbValue的控件,并转换为TextBox类型
TextBox tb = (TextBox)PreviousPage.FindControl("PbValue");
//如果tb不是空引用
if (tb != null)
{
//将tb的“Text”属性值给str变量
string str = tb.Text;
}
}
以上代码轻松获得了前一个页面中TextBox控件的“Text”属性值,这种方法比调用HttpServerUtility对象的Transfer方法更加快捷,并减少了处理步骤。
以上为常用的页面间传值方法,如果有特殊需要,还可以使用其他方法,例如通过数据库存储临时数据等
⑼ 页面传值的几种方式
一. 使用QueryString变量
QueryString是一种非常简单也是使用比较多的一种传值方式,但是它将传递的值显示在浏览器的地址栏中,如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法。
Response.Redirect( "target.aspx?param1=hello¶m2=hi ")
接收页面: string str = Request.QueryString["param1"];
string str1 = Request.QueryString["param2];
二.使用Cookie对象变量(Cookie是存放在客户端的)
设置Cookie: HttpCookie cookie_name = new HttpCookie("name");
cookie_name.Value = Label1.Text;
Reponse.AppendCookie(cookie_name);
获取Cookie:
string name= Request.Cookie["name"].Value.ToString();
三. 使用Session变量(session是存放在服务器端的)
设置Session: Session["name"] ="hello";
获取Session: string name = Session["name"].ToString();
四.使用Application 对象变量
Application对象的作用范围是整个全局,也就是说对所有用户都有效。此种方法不常使用,因为Application在一个应用程序域范围共享,所有用户可以改变及设置其值,故只应用计数器等需要全局变量的地方。
设置Application : Application["name"] = ="hello";
获取Application : string name = Application["name"].ToString();
五. PostBackUrl()方法
default.aspx页面:
Code
1 <asp:Button ID="Button1" Runat="server" Text="PostToAnotherPage" PostBackUrl="~/Default2.aspx" />
2
default2.aspx页面:
Code
1 if (PreviousPage != null)
2 {
3 TextBox textBox1 = (TextBox)PreviousPage.FindControl("TextBox1");
4 Response.write(textBox1.Text );
5 }
六.使用Server.Transfer方法
这个才可以说是面象对象开发所使用的方法,其使用Server.Transfer方法把流程从当前页面引导到另一个页面中,新的页面使用前一个页面的应答流,所以这个方法是完全面象对象的,简洁有效。下面这个代码是展示在需要很多个参数的时候,使用的方法,如果参数比较少就没必要使用这个方法了.
如果让所有的查询页面都继承一个接口,在该接口中定义一个方法,该方法的唯一作用就是让结果页面获得构建结果时所需的参数,就可实现多页面共享一个结果页面操作!