关于页面传值的方法,引发了很多讨论。看来有很多人关注这个,我就我个人观点做了些总结,希望对大家有所帮助。 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. 使用Application 对象变量Application对象的作用范围是整个全局,也就是说对所有用户都有效。其常用的方法用Lock和UnLock。a.aspx的C#代码private void Button1_Click(object sender, System.EventArgs e)
{
Application["name"] = Label1.Text;
Server.Transfer("b.aspx");
}b.aspx中C#代码private void Page_Load(object sender, EventArgs e)
{
string name;
Application.Lock();
name = Application["name"].ToString();
Application.UnLock();
}3. 使用Session变量想必这个肯定是大家使用中最常见的用法了,其操作与Application类似,作用于用户个人,所以,过量的存储会导致服务器内存资源的耗尽。a.aspx的C#代码private void Button1_Click(object sender, System.EventArgs e)
{
Session["name"] = Label.Text;
}b.aspx中C#代码private void Page_Load(object sender, EventArgs e)
{
string name;
name = Session["name"].ToString();
}4. 使用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();
}5. 使用Server.Transfer方法这个才可以说是面象对象开发所使用的方法,其使用Server.Transfer方法把流程从当前页面引导到另一个页面中,新的页面使用前一个页面的应答流,所以这个方法是完全面象对象的,简洁有效。a.aspx的C#代码public string Name
{
get{ return Label1.Text;}
}
private void Button1_Click(object sender, System.EventArgs e)
{
Server.Transfer("b.aspx");
}b.aspx中C#代码
private void Page_Load(object sender, EventArgs e)
{
a newWeb; //实例a窗体
newWeb = (source)Context.Handler;
string name;
name = newWeb.Name;
}
{
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. 使用Application 对象变量Application对象的作用范围是整个全局,也就是说对所有用户都有效。其常用的方法用Lock和UnLock。a.aspx的C#代码private void Button1_Click(object sender, System.EventArgs e)
{
Application["name"] = Label1.Text;
Server.Transfer("b.aspx");
}b.aspx中C#代码private void Page_Load(object sender, EventArgs e)
{
string name;
Application.Lock();
name = Application["name"].ToString();
Application.UnLock();
}3. 使用Session变量想必这个肯定是大家使用中最常见的用法了,其操作与Application类似,作用于用户个人,所以,过量的存储会导致服务器内存资源的耗尽。a.aspx的C#代码private void Button1_Click(object sender, System.EventArgs e)
{
Session["name"] = Label.Text;
}b.aspx中C#代码private void Page_Load(object sender, EventArgs e)
{
string name;
name = Session["name"].ToString();
}4. 使用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();
}5. 使用Server.Transfer方法这个才可以说是面象对象开发所使用的方法,其使用Server.Transfer方法把流程从当前页面引导到另一个页面中,新的页面使用前一个页面的应答流,所以这个方法是完全面象对象的,简洁有效。a.aspx的C#代码public string Name
{
get{ return Label1.Text;}
}
private void Button1_Click(object sender, System.EventArgs e)
{
Server.Transfer("b.aspx");
}b.aspx中C#代码
private void Page_Load(object sender, EventArgs e)
{
a newWeb; //实例a窗体
newWeb = (source)Context.Handler;
string name;
name = newWeb.Name;
}
解决方案 »
- CuteEditor 问题
- 请问怎么把vs2010起始页的新建项目改为新建网站?
- 急。。。。关于Btn按键
- ADO.NET通用DBHelper类,自己这两天琢磨的,和大家分享下,主要是希望有高手能指点下,好让我改进!
- 新浪微博或者QQ空间里的评论回得功能如何实现
- 如何控制fckeditor显示出来的字数
- 用asp.net控件,还是用html+js
- 散分贴,来了有分
- 数据读取问题求救!!
- 求助啊,关于page.ispostback的问题
- textbox 取值 乱码
- 我吧webconfig 从<?xml version="1.0"?>改成<?xml version="1.0" encoding="gb2312"?>页面就出错
我在添加一个
Cross-Page Posting定位至于源网页位于相同的应用程序的网页,可以读取源网页的值和公共属性,但是不要按浏览器中的重新整理和上一步,这样会照成无法预期的效果
eg:
aspx
<div>
您的名字:<asp:TextBox ID="name" runat="server"></asp:TextBox>
<asp:Button ID="btn_name" runat="server" PostBackUrl="~/Cross-Page Posting/CrossPageTarget.aspx"
Text="传送" OnClick="btn_name_Click" />
</div>
cs:
TextBox name = (TextBox)PreviousPage.FindControl("name");//非public 成员
Label1.Text = "欢迎你:" + name.Text;previouspage本身属于page类,并且只有在来源网页和目标网页属于同一个asp.net应用程序下的时候才能引用,如果网页不是跨网页公布的目标,或者是网页在不同的应用程序之中,就不会初始化previouspage属性,就不能使用previouspage来存取任何信息获得网页的公共属性:source.cs:public string UserName{ get{return aa.text;}}cross-page posting.aspx:<%@ PreviousPageType VirtualPath="~/Cross-Page Posting/Source.aspx"%>cross-page posting.cs:lab.text = previousopage.username;//一个网页中只能指示一个previousPage,不然出出现编译错误
针对 有 frame或者iframe的页面,可以任意调用。
跨页面调用一般不能跨域。
跨页面调用是一种很常用的方法
比如 数据库。把数据存入 数据库,别的页面都可以访问,。net的状态保持 就有 数据库方式的。还可以使用xml来存储数据,进行传值,等等。
这涉及到 编程中的 很多深层次的东西。比如设计模式,使用 adapter模式,把数据存在某一个地方,多个接口共享,这就是数据交互放的的共享方式。等等,可以扩充一下思维。
要用编码和解码!private void Button1_Click(object sender, System.EventArgs e)
{
Response.Redirect("b.aspx?name=" + Server.UrlEncode(nam) + "");
} b.aspx中C#代码
private void Page_Load(object sender, EventArgs e)
{
Label2.Text = Server.UrlDecode(Request.QueryString["name"].ToString());
}
1. asp.net 缓存功能的不足
在 .net framework 中,我们用到缓存最多的地方应该就是使用 asp.net 中的缓存服务( System.Web.Caching.Cache)了。它为我们提供了强大的缓存功能,包括 Output caching, Fragment caching 以及 Data caching(后面所谈及的内容主要涉及 Data caching)。但是此缓存功能有一个很大的缺点,就是缓存的内容不能在多个 AppDomain 中共享,在 AppDomain scope, Machine scope和Application farm scope 三个级别中只实现了 AppDomain scope 一个级别。这在很多应用中是很不方便的。 比如在网站中有一个应用程序是用于用户管理的:新增、编辑用户信息等,另外还有其他一些需要用到用户信息的应用程序,比如blog、chat、forums等等。这些 web 应用程序分别是在不同的 AppDomain 里面运行的。由于用户的信息是不常更改的,而且是经常需要访问的,显然应该被存放在缓存里面。但是由于多个 AppDomain 都需要访问,使用 asp.net 中的缓存功能是很难保证用户信息被更改后能被马上应用到别的 AppDomain 里面的。如果是在 Application farm 的环境下,更是不能保证信息的同步的。 链接
{
get{ return Label1.Text;}
}
private void Button1_Click(object sender, System.EventArgs e)
{
Server.Transfer("b.aspx");
} b.aspx中C#代码
private void Page_Load(object sender, EventArgs e)
{
a newWeb; //实例a窗体
newWeb = (source)Context.Handler;
string name;
name = newWeb.Name;
} 楼主的这个方法我试了一下,报错了,首先 这两句
a newWeb; //实例a窗体
newWeb = (source)Context.Handler;
source 处就报错了,source标示什么意思? 另外,webForm不像 winform中直接实例化窗体的吧?还有一个问题像 :http://www.mall.taobao.com/go/act/sale/hampmd1chany.php?TBG=82.7c706b3c-16ec-4d08-8a3d-8a09bbfbbf9c.11&ad_id=&am_id=&cm_id=14001175258a484858f2&pm_id= 这种URL是如何实现的,加密了的?
a.aspx的C#代码
public class a : Page{
public static int aaa;
private void Button1_Click(object sender, System.EventArgs e)
{
aaa = 123;
}
}b.aspx中C#代码
private void Page_Load(object sender, EventArgs e)
{
Label2.Text = a.aaa;
}
5. 使用Server.Transfer方法 这个才可以说是面象对象开发所使用的方法,其使用Server.Transfer方法把流程从当前页面引导到另一个页面中,新的页面使用前一个页面的应答流,所以这个方法是完全面象对象的,简洁有效。 a.aspx的C#代码 public string Name
{
get{ return Label1.Text;}
}
private void Button1_Click(object sender, System.EventArgs e)
{
Server.Transfer("b.aspx");
} b.aspx中C#代码
private void Page_Load(object sender, EventArgs e)
{
a newWeb; //实例a窗体
newWeb = (source)Context.Handler;
string name;
name = newWeb.Name;
} 这个b页没法实例化
公共类型存储静态类等存放复杂对象。
1.GET提交:URL和RESPONOSE重定向
2.POST提交:Server.Transfer,表单提交和跨页数据提交
3.COOKIE SESSION APPLICATION 等
这里改下a newWeb; //实例a窗体
newWeb = (a)Context.Handler; 应该没问题了