.net 页面传参方式总结
一、使用Querystring
Querystring是一种非常简单的传值方式,其缺点就是:安全性低。会把要传送的值显示在浏览器的地址栏中(也就是不需要保密得参数),并且在此方法中不能够传递对象,参数的长度不能大于 1024字节(?),当参数中有中文得时候,通常需要使用HttpUlitity.UrlEncode方法来对参数进行编码和解码。
优点:速度快。如果你想传递一个安全性不是那么太重要或者是一个简单的数值时,用此方法最好不过了。下面通过一个小例子来完成传值工作,步骤如下:
1、创建一个web form
2、在新建的web form中放置一个button1,在放置两个TextBox1,TextBox2
3、为button按钮创建click事件
代码如下:
privatevoid Button1_Click
(object sender, System.EventArgs e)
{
string url;
url="webform2.aspx?name="+
TextBox1.Text +"&email="+
TextBox2.Text;
Response.Redirect(url);
}
4、新建一个目标页面命名为webform2
5、在webform2中放置两个Label1,Label2
在webform2的Page_Load中添加如下代码:
privatevoid Page_Load
(object sender, System.EventArgs e)
{
Label1.Text=Request.QueryString["name"];
Label2.Text=Request.QueryString["email"];
}
运行,即可看到传递后的结果了。
二、使用Session变量
使用Session变量传值是一种最常见的方式了,此中方式不仅可以把值传递到下一个页面,还可以交叉传递到多个页面,直至把Session变量的值removed后,变量才会消失。举个例子看看:
1、创建一个web form
2、在新建的web form中放置一个button1,在放置两个TextBox1,TextBox2
3、为button按钮创建click事件
代码如下:
privatevoid Button1_Click
(object sender, System.EventArgs e)
{
Session["name"]=TextBox1.Text;
Session["email"]=TextBox2.Text;
Response.Redirect("webform2.aspx");
}
4、新建一个目标页面命名为webform2
5、在webform2中放置两个Label1,Label2
在webform2的Page_Load中添加如下代码:
privatevoid Page_Load
(object sender, System.EventArgs e)
{
Label1.Text=Session["name"].ToString();
Label2.Text=Session["email"].ToString();
Session.Remove("name");
Session.Remove("email");
}
运行,即可看到传递后的结果了。
这种方法得优缺点是:使用Session变量往往会占用服务器端的内存使用,所以再网页流量很大的时候,Session便不能很好的完成传值得任务,由于session有一个timeout,所以在使用的时候对用户得操作也有一定的影响。
三、使用Server.Transfer
虽然这种方法有点复杂,但也不失为一种在页面传值的方式。使用该方法你可以在另一个页面以对象属性的方式来存取显露的值,当然了,使用这种方法,你需要额外写一些代码以创建一些属性以便可以在另一个页面访问它,但是,这个方式带来的好处也是显而易见的.
举个例子看看:
1、创建一个web form
2、在新建的web form中放置一个button1,在放置两个TextBox1,TextBox2
3、为button按钮创建click事件
代码如下:
privatevoid Button1_Click
(object sender, System.EventArgs e)
{
Server.Transfer("webform2.aspx");
}
4、创建过程来返回TextBox1,TextBox2控件的值代码如下:
publicstring Name
{
get
{
return TextBox1.Text;
}
} publicstring EMail
{
get
{
return TextBox2.Text;
}
}
5、新建一个目标页面命名为webform2
6、在webform2中放置两个Label1,Label2
在webform2的Page_Load中添加如下代码:
privatevoid Page_Load
(object sender, System.EventArgs e)
{
//创建原始窗体的实例
WebForm1 wf1;
//获得实例化的句柄
wf1=(WebForm1)Context.Handler;
Label1.Text=wf1.Name;
Label2.Text=wf1.EMail;
}
运行,即可看到传递后的结果了。
这种方法 优缺点是:需要写一些额外的代码创建一些属性,但是它简洁清晰,并且是面向对象的。
四、Application
因为应用程序和它存储的所有对象可以同时由不同的线程访问,所以最好只将很少修改的数据与应用程序范围一起存储。理想情况是,对象在 Application_Start 事件中初始化,对它的进一步访问是只读的。
在下面的示例中,文件在 Application_Start(在 Global.asax 文件中定义)中读取,内容则以应用程序状态存储在 DataView 对象中。
void Application_Start()
{
DataSet ds =new DataSet();
FileStream fs =new FileStream(Server.MapPath("schemadata.xml"),FileMode.Open,FileAccess.Read);
StreamReader reader =new StreamReader(fs);
ds.ReadXml(reader);
fs.Close();
DataView view =new DataView(ds.Tables[0]);
Application["Source"] = view;
}
在 Page_Load 方法中,DataView 随后被检索并用于填充 DataGrid 对象:
void Page_Load(Object sender, EventArgs e)
{
DataView Source = (DataView)(Application["Source"]);
MyDataGrid.DataSource = Source;
}
此解决方案的优点是只有第一个请求付出检索数据的代价。所有后面的请求则使用已有的 DataView 对象。由于数据自初始化后从不修改,所以不必为序列化访问做任何规定。
Application得使用一般是相对于整个项目来说相对静止的变量,比如数据库连接变量等。对于那些针对每一个用户,每一个会话未必一样得变量就不适用了。通常Application变量得值是在Config终指定。也可以在global.ascx中指定。
五、Cookie:
下面的示例说明如何使用客户端 Cookie 存储易失的用户首选项。
在客户端存储 Cookie 是 ASP.NET 的会话状态将请求与会话关联的方法之一。Cookie 也可以直接用于在请求之间保持数据,但数据随后将存储在客户端并随每个请求一起发送到服务器。浏览器对 Cookie 的大小有限制,因此,只有不超过 4096 字节才能保证被接受。
当数据存储在客户端时,文件 cookies1.aspx 中的 Page_Load 方法检查客户端是否已发送了 Cookie。如果没有,则创建并初始化一个新的 Cookie 并将其存储在客户端:
protectedvoid Page_Load(Object sender, EventArgs e)
{
if (Request.Cookies["preferences1"] ==null)
{
HttpCookie cookie =new HttpCookie("preferences1");
cookie.Values.Add"ForeColor", "black");
Response.AppendCookie(cookie);
}
}
在同一页上,再次使用 GetStyle 方法提供存储在 Cookie 中的个别值:
protected String GetStyle(String key)
{
HttpCookie cookie = Request.Cookies["preferences1"];
if (cookie !=null)
{
switch (key)
{
case"ForeColor" :
return cookie.Values["ForeColor"];
break;
}
}
return"";
}
若要使 Cookie 在会话之间持久,必须将 HttpCookie 类上的 Expires 属性设置为将来的某个日期。除了 Cookie.Expires 的赋值,下列自定义 .aspx 页上的代码与上一个示例相同:
protectedvoid Submit_Click(Object sender, EventArgs e)
{
HttpCookie cookie =new HttpCookie("preferences2");
cookie.Values.Add("ForeColor",ForeColor.Value);
cookie.Expires = DateTime.MaxValue; // Never Expires
Response.AppendCookie(cookie);
Response.Redirect(State["Referer"].ToString());
}
Cookie作为一种提交,请求时保存数据得方式,又很明显的优缺点。他的缺点在上面有所表述,比如大小受限,不能保存对象等,另外,作为保存时间,也就 是数据得有效期来说,确是保存得最好的。我们可以通过设置cookie得过期时间等属性来设置。Cookie又很多常用属性,包括domain,path 等,这些资料可以在quickstart上获取到。
六、ViewState:
ASP.NET 为每个控件提供视图状态的服务器端注记。控件可以使用类 StateBag 的一个实例上的 ViewState 属性,在请求之间保存它的内部状态。StateBag 类提供词典样式的接口来存储与字符串键关联的对象。
文件 pagestate1.aspx 显示一个可见的面板并使用键 PanelIndex 在该页的视图状态下存储它的索引:
protectedvoid Next_Click(Object sender, EventArgs e )
{
String PrevPanelId ="Panel"+ ViewState["PanelIndex"].ToString();
ViewState["PanelIndex"] = (int)ViewState["PanelIndex"] +1;
String PanelId ="Panel"+ ViewState["PanelIndex"].ToString();
}
注意,如果在多个浏览器窗口中打开该页,每个浏览器窗口最初将显示此名称面板。每个窗口可以独立地在面板之间定位。
小结
1. 使用应用程序状态变量存储很少修改但经常使用的数据。
2. 使用会话状态变量存储特定于某个会话或用户的数据。数据全部存储在服务器上。这种方法适于短期的、大量的或敏感的数据。
3. 将少量易失数据存储在非持久性 Cookie 中。数据存储在客户端,在每次请求时发送到服务器,并在客户端结束执行时失效。
4. 将少量非易失数据存储在持久性 Cookie 中。数据存储在客户端直到失效,并在每次请求时发送到服务器。
5. 将少量请求特定的数据存储在视图状态中。数据从服务器发送到客户端并返回。
.net 页面传参方式总结的更多相关文章
- 关于页面传参,decodeURI和decodeURIComponent
之前写过一个关于页面传参的,但是是前端相对于自己的页面做的跳转,也就是页面1,跳转到页面2,里面带的参数.这里可以参考我上一篇文章,包括里面参数中如果有数组和json格式的情况.但是需要注意的是,我前 ...
- react中的传参方式
react是一个SPA模式,即组件嵌套租,在一个单页面的应用中组件间的数值传递是必不可少的,主要的传参方式大致有一下几种: 1,在挂载的地方给组件传参 ReactDOM.rander(<a na ...
- vue页面传参和接参
https://blog.csdn.net/zhouzuoluo/article/details/81259298(copy) js** this.$router.push({ name: 'Flow ...
- AngularJS中页面传参方法
1.基于ui-router的页面跳转传参 (1) 用ui-router定义路由,比如有两个页面,一个页面(producers.html)放置了多个producers,点击其中一个目标,页面跳转到对应的 ...
- vue 通过 name 和 params 进行调整页面传参刷新参数丢失问题&vue路由可选参数
vue 通过 name 和 params 进行调整页面传参刷新参数丢失问题 router.js: export default new Router({ routes: [ { path: '/', ...
- $router和$route的区别,路由跳转方式name 、 path 和传参方式params 、query的区别
一.$router和$route的区别 $router : 是路由操作对象,只写对象$route : 路由信息对象,只读对象 例子://$router操作 路由跳转 this.$router.push ...
- react第六单元(react组件通信-父子组件通信-子父组件通信-跨级组件的传参方式-context方式的传参)
第六单元(react组件通信-父子组件通信-子父组件通信-跨级组件的传参方式-context方式的传参) #课程目标 1.梳理react组件之间的关系 2.掌握父子传值的方法 3.掌握子父传值的方法 ...
- Vue Router路由导航及传参方式
路由导航及传参方式 一.两种导航方式 ①:声明式导航 <router-link :to="..."> ②:编程式导航 router.push(...) 二.编程式导航参 ...
- angularjs简单实现$http.post(CORS)跨域及$http.post传参方式模拟jQuery.post
1.开启angularjs的CORS支持 .config(function($httpProvider) { // CORS post跨域配置 $httpProvider.defaults.useXD ...
随机推荐
- WebLogic 12c 修改节点 Managed Server 和 AdminServer 内存方法
1.进入管理节点: 2.添加JVM参数: -Xms1024m -Xmx2048m -XX:PermSize=512m -XX:MaxPermSize=1024m JAVA 8 可将-XX:PermSi ...
- 【IT笔试面试题整理】二叉树中和为某一值的路径--所有可能路径
[试题描述] You are given a binary tree in which each node contains a value. Design an algorithm to print ...
- 【React 资料备份】React Hook
Hooks是React16.8一个新增项,是我们可以不用创建class组件就能使用状态和其他React特性 准备工作 升级react.react-dom npm i react react-dom - ...
- 为MVC应用程序创建导航条
今晚写点什么呢?对于以前的练习,看来看去,好象还差一个菜单导航条.在练习的站点中,有创建了三个控制器,我们就用它们来创建一个导航条吧.想实现这导航条,刚开始还是有点难,还是想起以前ASP.NET的Me ...
- sql union 语句 case语句
1:Union语句: 把两个结果合为一体(但是完全重复的数据会去掉) Eg1: select name, age, ‘学生无工资’ from student union ...
- Java并发编程-信号量
Semaphore 直译是信号量,它的功能比较好理解,就是通过构造函数设定一个数量的许可,然后通过 acquire 方法获得许可,release 方法释放许可.它还有 tryAcquire 和 acq ...
- spring中获取ApplicationContext对象的技巧,含源码说明
第一步,实现接口ApplicationContextAware,重写setApplicationContext方法,下方代码标红的地方,绿色部分 可以通过声明来进行存储到本类中. @Component ...
- TF-IDF原理
什么是TF-IDF TF-IDF(Term Frequency-Inverse Document Frequency, 词频-逆文件频率). 是一种用于资讯检索与资讯探勘的常用加权技术.TF-IDF ...
- 漫画 | Spring AOP
上期,我们看到有小伙伴留言说希望讲讲AOP 然后...... 别激动,来得及 什么是AOP AOP是Spring 框架的一个关键组件,全称为Aspect-OrientedProgramming(面向切 ...
- POJ1236(KB9-A 强连通分量)
Network of Schools Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 19326 Accepted: 75 ...