6

我正在尝试使用 C# ASP.Net 将表单数据从一个页面发送到另一个页面。我有两个页面 default.aspx 和 default2.aspx。这是我在 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 的数据?

4

5 回答 5

24

你有几个选择,考虑

  1. 会话状态
  2. 请求参数

会话状态

如果要在页面之间发送数据,可以考虑使用Session State

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&param2=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?把数据拿出来。

如果您不熟悉查询字符串变量,请查看他们的维基百科文章

于 2012-10-07T12:34:48.280 回答
7

会话变量在这种情况下很有用。

例如,假设您的文本框包含登录凭据,然后将它们保存在会话中,以便您以后可以在任何其他页面中使用它们。像这样:

在 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();
于 2012-10-07T12:37:17.283 回答
3

Page_Load在Default2.aspx中试试这个。

 if (PreviousPage != null)
        {
            if (((TextBox)PreviousPage.FindControl("TextBox1")) != null)
            {
                string txtBox1 = ((TextBox)PreviousPage.FindControl("TextBox1")).Text;
                Response.Write(txtBox1);
            }
        }

PostBackUrl是的,您是正确的,如果您使用该属性,第 1 页的数据将被发送到第 2 页。

MSDN 链接

于 2012-10-07T12:11:37.413 回答
2

虽然这里的所有答案都有效,但有些并不是最有效的。为什么一个简单/标准http POST必须调用(昂贵的)服务器端Session

您的代码没有做任何特别的事情 - 它只是将表单发布到另一个页面。获取 POSTed 数据所需要做的就是遍历Request.Form集合。

在可以设置之前PostBackUrl(如果内存服务于 asp.net 的版本 1),Server.Transfer并且获取对上一页的引用是如何完成/记录跨页 POST。然而,有了PostBackUrl,事情又回到了基础,它应该是这样的——http POST从一种资源到另一种资源的标准。

这是一个类似的 SO 线程,可能会有所帮助。

于 2012-10-07T18:39:44.237 回答
1

另一种方法是将数据保存在数据库中并在另一个页面上取回:

//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();
于 2019-07-28T02:32:40.243 回答