我正在尝试使用C#ASP.Net将表单数据从一个页面发送到另一个页面。我有两个页面default.aspx和default2.aspx.Here是我在default.aspx中的代码:
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<br />
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<br />
<asp:Button ID="Button1" runat="server" Text="Go"
PostBackUrl="~/Default2.aspx" />
<br />
据我所知,目前PostBackUrl用于设置您希望数据发送的页面是否正确?
另外,我如何检索发送到Default2.aspx的数据?
答案 0 :(得分:22)
您有几个选择,请考虑
会话状态
如果要在页面之间发送数据,可以考虑使用Session State。
ASP.NET会话状态使您可以存储和检索a的值 用户作为用户在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
您可以使用How do you test your Request.QueryString[] variables?之类的内容来获取数据。
如果您不熟悉查询字符串变量,请查看their wikipedia article
答案 1 :(得分:7)
会话变量在此上下文中非常有用。
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();
答案 2 :(得分:3)
在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页。
答案 3 :(得分:2)
虽然这里的所有答案都能正常工作但有些并不是最有效的。为什么简单/标准http POST
必须调用(昂贵的)服务器端Session
?
您的代码没有做任何特别的事情 - 它只是将表单发布到另一个页面。获取POSTed数据所需要做的就是通过Request.Form
集合。
在设置PostBackUrl
的可用性之前(如果内存服务于asp.net的第1版),Server.Transfer
并获取对上一页的引用是如何完成/记录跨页POST。但是,对于PostBackUrl
,事情可以追溯到基础,应该是这样 - 从一个资源到另一个资源的标准http POST
。
这是similar SO thread,可能会有帮助。
答案 4 :(得分:0)
另一种方法是将数据保存在数据库中并在另一页上取回:
//update
string query = "UPDATE table SET col = 'a'";
SqlCommand command = new SqlCommand(query, connection);
command.ExecuteScalar();
//select
string query = "SELECT col FROM table";
SqlCommand command = new SqlCommand(query, connection);
string value = command.ExecuteScalar();