Allen 2023-07-04 0 1564 0 0 0 0
Asp.net基础,Asp.net网站编程基础(一):在页面间传递共享变量的几种方法

Asp.net网站编程基础(一)

1,使用html控件(input元素):
使用请求对象的表单元素Request.Form["name"]
string s = Request.Form["t1"];
Response.Write(s);|

2,使用Web服务端控件:使用控件属性
string s = TextBox1.Text;
Response.Write(s) ;

3,使用ViewState视图状态对象
当一个Web窗体被第一次请求时,自动产生一个ViewState对象,该对象对于本页面的所有请求都可以共享
ViewState.Add ("strDemo","新的字符串");
Response.Write(ViewState["strDemo"].ToString());

4,连续窗体中传递
第一个页面
Response.Redirect("default2.aspx?id="+ TextBox2.Text);
第二个页面
string s = Request.QueryString["id"];
Response.Write(s);

5,在任意页面之间共享变量
1)session
服务器为每个用户创建一个Session对象,任意页面都可以访问,当用户离开网站时消失。session是集合类型,使用add/remove管理
//赋值
Session.Add("id", TextBox3.Text);
//任意页面访问
string s = Session["id"].ToString();
Response.Write(s);
//关闭浏览器后失效
因为保存了sesssionID,可以读出来,关闭后就访问不了。
...
//但如果没经过赋值页面时,会产生错误,可以下面这样解决:
if (Session["id"] != null)l
string s = Session["id"].ToString() ;Response.Write(s);
)
//最好的办法是在全局文件global.asax中,为Session对象Add元素.
void Session_Start(object sender,EventArgs e){
//在新会话启动时运行的代码
{
Session.Add("id","");
}
//然后在页面中给session元素赋值
protected void Button6_Click (object sender,。。。
{
Session["id"]= TextBox3.Text;l
}
//这样在任意页面都不会报错了。
优点:安全
缺点:并发性能限制,当用户数量多时,会降低性能。而且不适合分布式网站
解决方案
1)不用session
2)使用asp.net status services,状态服务。这个服务是默认关闭的,要手动打开并设为自动启动。
然后修改配置文件web.config,在svstem.web中加入


mode="StateServer" 意思是session不用IIS管理,改为用状态服务管理。但启用这个也是比较吃内存的,学习时可以改为mode="InProc"。
可以指定IP使用其他服务器
也可以修改为:mode="SQLServer" 用数据库长久保留session信息。

数据库文件:C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallSqlState.sql
执行此脚本就创建数据库了。

还可以指定session有效时长为20分钟:
...
6,使用cookie保存信息
保存在客户端,不会造成性能压力
//要用httpCookie实例化一个对象,然后respones发送给客户端。
HttpCookie hc = new HttpCookie("pid",TextBox4.text);
Response.Cookies.Add(hc);
//在页面中取出方法
string s = Request.Cookies["pid"].Value;
Response.Write(s);

以上临时性cookie,浏览器关闭cookie消失。
...
//持久性cookie,保存在客户端文件中,只要指定有效期就可以了。
HttpCookie hc = new HttpCookie("pid",TextBox4.text);
hc.Expires = DateTime.Now.AddDays(7);  //7天有效
Response.Cookies.Add(hc);
...
缺点是安全性差,不要存储敏感信息。
...
7,使用HTML5 Web存储功能实现在同一个网站的任意页面之间共享变量,只能在javascript中设置和读取。
两种内置的对象localStorage持久性存储信息,sessionStorage l临时性存储信息
<input type="text" id="t5"/>
<input type="button" id="b5" value="存储" onclick="f1()" />
<script type="text/javascript">
function f1()
{
localStorage.UserID = document.getElemeritById("t5").value;
</script>
//取出,而且没有时间限制
<input type="button" value="显示" onclick="f2()"/>
<script type="text/javascript">
function f2()
{
document.write(localStorage.UserID);
}
...
以上换成sessionStorage,就是临时性信息,使用方法完全一样。
从安全性和性能上都非常好。也可以保存大量信息,可以在IE中设置内存大小。


Tag: Asp.net基础
我也要发一个   ·   返回首页   ·   返回[Asp.net]   ·   前一个   ·   下一个
相关内容
欢迎评论
未登录,
请先 [ 注册 ] or [ 登录 ]
(一分钟即可完成注册!)
返回首页     ·   返回[Asp.net]   ·   返回顶部