为了账号安全,请及时绑定邮箱和手机立即绑定

如何在不使用Session的情况下跨ASP.net页面传递值

如何在不使用Session的情况下跨ASP.net页面传递值

C#
小唯快跑啊 2019-11-13 15:05:38
我正在尝试提高Web门户的性能。我正在使用会话存储状态信息。但是我听说使用会话会降低应用程序的速度。还有什么其他方法可以在asp.net中的整个页面中传递值。
查看完整描述

3 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

有多种方法可以实现此目的。我可以向您简要介绍一下我们在日常编程生命周期中使用的4种类型。


请仔细阅读以下几点。


1查询字符串。


FirstForm.aspx.cs


Response.Redirect("SecondForm.aspx?Parameter=" + TextBox1.Text);

SecondForm.aspx.cs


TextBox1.Text = Request.QueryString["Parameter"].ToString();

当您传递整数类型的值或其他短参数时,这是最可靠的方法。如果在通过查询字符串传递值时在值中使用任何特殊字符,则此方法将更先进,必须在将值传递到下一页之前对其进行编码。因此,我们的代码段将如下所示:


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();");

}

我们创建了一个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();

在上面的示例中,我们为按钮分配了PostBackUrl属性,我们可以确定按钮将发布到的页面而不是页面本身。在下一页中,我们可以使用Request对象访问上一页的所有控件。


您也可以使用PreviousPage类来访问上一页的控件,而不是使用经典的Request对象。


SecondForm.aspx


TextBox textBoxTemp = (TextBox) PreviousPage.FindControl(“TextBox1″);

TextBox1.Text = textBoxTemp.Text;

您已经注意到,这也是在页面之间传递值的简单,干净的实现。




查看完整回答
反对 回复 2019-11-13
  • 3 回答
  • 0 关注
  • 428 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信