如何在不使用Session的情况下跨ASP.net传递值
我正在努力提高我的门户网站的性能。 我使用Session来存储状态信息。
但是我听说使用会话会降低应用程序的速度。 是否有任何其他方式在整个页面在asp.net中传递值。
您可以通过以下方式将值从一个页面传递到另一个页面。
Response.Redirect Cookies Application Variables HttpContext
的Response.Redirect
SET:
Response.Redirect("Defaultaspx?Name=Pandian");
GET:
string Name = Request.QueryString["Name"];
cookies
SET:
HttpCookie cookName = new HttpCookie("Name"); cookName.Value = "Pandian";
GET:
string name = Request.Cookies["Name"].Value;
应用程序variables
SET:
Application["Name"] = "pandian";
GET:
string Name = Application["Name"].ToString();
请参阅这里的完整内容:将值从一个传递到另一个
有多种方法来实现这一点。 我可以简单地向您解释我们在日常编程生命周期中使用的4种types。
请通过以下几点。
1查询string。
FirstForm.aspx.cs
Response.Redirect("SecondForm.aspx?Parameter=" + TextBox1.Text);
SecondForm.aspx.cs
TextBox1.Text = Request.QueryString["Parameter"].ToString();
当您传递整数types的值或其他短参数时,这是最可靠的方法。 如果在传递查询string的同时使用该值中的任何特殊字符,则必须对该值进行编码,然后才能将该值传递给下一页。 所以我们的代码片段将是这样的:
FirstForm.aspx.cs
Response.Redirect("SecondForm.aspx?Parameter=" + Server.UrlEncode(TextBox1.Text));
SecondForm.aspx.cs
TextBox1.Text = Server.UrlDecode(Request.QueryString["Parameter"].ToString());
url编码
- Server.URLEncode
- HttpServerUtility.UrlDecode
2.通过上下文对象传递值
通过上下文对象传递值是另一个被广泛使用的方法。
FirstForm.aspx.cs
TextBox1.Text = this.Context.Items["Parameter"].ToString();
SecondForm.aspx.cs
this.Context.Items["Parameter"] = TextBox1.Text; Server.Transfer("SecondForm.aspx", true);
请注意,我们使用Server.Transfer而不是Response.Redirect导航到另一个页面。我们中的一些人也使用Session对象来传递值。 在该方法中,值存储在Session对象中,然后在第二页中从Session对象中取出。
3.将表单发布到另一个页面而不是回发
第三种方法通过将页面发布到另一个表单来传递价值。 这是这样的例子:
FirstForm.aspx.cs
private void Page_Load(object sender, System.EventArgs e) { buttonSubmit.Attributes.Add("onclick", "return PostPage();"); }
我们创build一个JavaScript函数来发布表单。
SecondForm.aspx.cs
function PostPage() { document.Form1.action = "SecondForm.aspx"; document.Form1.method = "POST"; document.Form1.submit(); } TextBox1.Text = Request.Form["TextBox1"].ToString();
在这里,我们将表单发布到另一个页面而不是它本身。 您可能会在第二页使用此方法获取viewstate无效或错误。 处理这个错误是把EnableViewStateMac=false
4.另一种方法是通过添加控件的PostBackURL属性来进行跨页面回发
在ASP.NET 2.0中,Microsoft通过为跨页面回发添加控件的PostBackURL属性来解决此问题。 实施是一个设置控制权的问题,你就完成了。
FirstForm.aspx.cs
<asp:Button id=buttonPassValue style=”Z-INDEX: 102″ runat=”server” Text=”Button” PostBackUrl=”~/SecondForm.aspx”></asp:Button>
SecondForm.aspx.cs
TextBox1.Text = Request.Form["TextBox1"].ToString();
在上面的例子中,我们正在分配button的PostBackUrl属性,我们可以确定它将发布的页面而不是它本身。 在下一页中,我们可以使用Request对象访问前一页的所有控件。
您也可以使用PreviousPage类来访问上一页的控件,而不是使用传统的Request对象。
SecondForm.aspx
TextBox textBoxTemp = (TextBox) PreviousPage.FindControl(“TextBox1″); TextBox1.Text = textBoxTemp.Text;
正如您已经注意到的,这也是页面之间传递值的简单而干净的实现。
参考: MICROSOFT MSDN网站
快乐编码!
如果只是为了在页面之间传递值而只需要一个请求。 使用Context.
上下文
Context对象为单个用户保存单个请求的数据,并且仅在请求的持续时间内保留。 上下文容器可以容纳大量的数据,但通常用于保存小块数据,因为它通常是通过global.asax中的处理程序为每个请求实现的。 上下文容器(可从页面对象访问或使用System.Web.HttpContext.Current)提供用于保存需要在不同的HttpModules和HttpHandlers之间传递的值。 它也可以用来保存与整个请求相关的信息。 例如,IBuySpy门户在global.asax中的Application_BeginRequest事件处理程序期间将一些configuration信息填充到此容器中。 请注意,这只适用于当前的请求; 如果您需要的东西仍然会在下一个请求周围,请考虑使用ViewState。 从Context集合中设置和获取数据的语法与您已经看到的其他集合对象的语法相同,如Application,Session和Cache。 这里显示了两个简单的例子:
// Add item to Context Context.Items["myKey"] = myValue; // Read an item from the Context Response.Write(Context["myKey"]);
http://msdn.microsoft.com/en-us/magazine/cc300437.aspx#S6
使用以上。 如果你做了一个Server.Transfer
你已经保存在上下文中的数据现在将可用于下一页。 您不必关心删除/整理这些数据,因为它仅限于当前的请求。
您可以将其分配给隐藏字段,并使用它进行检索
var value= Request.Form["value"]
您可以使用查询string将值从一个页面传递到另一个页面..
1.使用查询string来传递值
Response.Redirect("Default3.aspx?value=" + txt.Text + "& number="+n);
2.通过使用这些方法中的任何一种来回收您想要的页面中的值。
方法1 :
string v = Request.QueryString["value"]; string n=Request.QueryString["number"];
方法2 :
NameValueCollection v = Request.QueryString; if (v.HasKeys()) { string k = v.GetKey(0); string n = v.Get(0); if (k == "value") { lbltext.Text = n.ToString(); } if (k == "value1") { lbltext.Text = "error occured"; } }
注 :方法2是最快的方法。