将数据从一个页面发送到另一个页面
我正在尝试使用C#ASP.Net将表单数据从一个页面发送到另一个页面。 我有两个页面default.aspx和default2.aspx.Here是我在default.aspx中的代码:
据我所知,到目前为止,PostBackUrl用于设置您希望数据发送的页面是否正确?
另外,我如何检索发送到Default2.aspx的数据?
你有几个选择,考虑一下
- 会话状态
- 请求参数
会话状态
如果要在页面之间发送数据,可以考虑使用会话状态 。
ASP.NET会话状态使您能够在用户在Web应用程序中导航ASP.NET页面时存储和检索用户的值。 HTTP是无状态协议。 这意味着Web服务器将页面的每个HTTP请求视为独立请求。 服务器不保留先前请求期间使用的变量值的知识。 ASP.NET会话状态在有限时间窗口内将来自同一浏览器的请求标识为会话,并提供了在该会话期间持久保存变量值的方法。 默认情况下,为所有ASP.NET应用程序启用ASP.NET会话状态。
最重要的是,它很容易!
放入数据(例如在default1.aspx上)
Session["FirstName"] = FirstNameTextBox.Text; Session["LastName"] = LastNameTextBox.Text;
把它拿出来(例如在default2.aspx上)
string firstname = Session["FirstName"] // value of FirstNameTextBox.Text; string lastname = Session["LastName"] // value of LastNameTextBox.Text;
请求参数
如果要发送少量数据(例如id = 4),则使用查询字符串变量可能更实际。
您应该探索查询字符串变量的使用,例如
http://www.domain.com?param1=data1¶m2=data2
然后,您可以将数据输出
string param1 = Request.QueryString["param1"]; // value will be data1 string param2 = Request.QueryString["param2"]; // value will be data2
您可以使用类似于如何测试Request.QueryString []变量的内容? 获取数据。
如果您不熟悉查询字符串变量,请查看他们的维基百科文章
会话变量在此上下文中很有用。
Foe示例假设您的文本框包含登录凭据,然后将它们保存在会话中,以便以后可以在任何其他页面中使用它们。 像这样:
在Button_Click-
Session["name"]=TextBox1.Text; Session["pwd"]= TextBox2.Text;
而不是PostBackUrl="~/Default2.aspx"
你可以写下面 –
//in button click Server.Transfer("~/Default2.aspx");
在Default2.aspx页面加载:
string a= Session["name"].ToString(); string b= Session["pwd"].ToString();
在Default2.aspx的Page_Load
中尝试此操作。
if (PreviousPage != null) { if (((TextBox)PreviousPage.FindControl("TextBox1")) != null) { string txtBox1 = ((TextBox)PreviousPage.FindControl("TextBox1")).Text; Response.Write(txtBox1); } }
是的,你是对的,如果你使用PostBackUrl
属性,第1页的数据将被发送到第2页。
MSDN链接
虽然这里的所有答案都有效但有些并不是最有效的。 为什么简单/标准的http POST
必须调用(昂贵的)服务器端Session
?
您的代码没有做任何特殊的事情 – 它只是将表单发布到另一个页面。 要获取POSTed数据,您需要做的就是通过Request.Form
集合。
在设置PostBackUrl
的可用性之前(如果内存服务于asp.net的第1版), Server.Transfer
和获取对前一页的引用是如何完成/记录跨页POST。 然而,使用PostBackUrl
,事情又回归基础,它应该是 – 从一个资源到另一个资源的标准http POST
。
这是一个类似的SO线程 ,可能会有所帮助。