【问题标题】:Send data from one page to another将数据从一页发送到另一页
【发布时间】:2012-09-27 22:24:05
【问题描述】:

我正在尝试使用 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 的数据?

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    你有几个选择,考虑一下

    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? 之类的方式获取数据。

    如果您不熟悉查询字符串变量,请查看their wikipedia article

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案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 页。

        MSDN link

        【讨论】:

        • 我猜他需要使用Server.Transfer
        • @IssaQandil 他为什么需要那个?我自己试过了,效果很好。
        • 当您使用传输方法或使用跨页发布将处理从一个 ASP.NET 页面传输到另一个时,源页面包含目标页面可能需要的请求信息。您可以使用 PreviousPage 属性来访问该信息。取自此链接msdn.microsoft.com/en-us/library/…
        • 我使用了你的代码,但我似乎得到了 NullPointerException
        • @user1525474 到底在哪里?您可以发布更多代码吗?只是“我遇到错误”有点难以帮助。
        【解决方案4】:

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

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

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

        这里有一个similar SO thread,可能会有所帮助。

        【讨论】:

        • 正是如此,使用 PostBackUrl 你需要回到基础
        • @IssaQandil 是的,ASP.net 并没有向 Web 引入任何“特殊”的东西(但它对开发人员来说确实是奇迹)。它的核心是根据http 的基本原则工作。 Postback 只不过是指向同一页面的 http POST。使用PostBackUrl 只是将http POST 的目标更改为网络上的其他资源(可以解析/处理发布的数据),ASP.Net 与否,是否相同。
        • 这就是我在他之前讨论同一主题的问题中试图告诉他的,希望他能阅读您的说明。
        【解决方案5】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-01-30
          • 2020-08-16
          • 2013-01-24
          • 2020-05-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多