将参数发送到另一个ASP.Net页面

5
我在C#中有一个名为“Point”的类。
public class Point(){
.
.
}

page1.aspx 页面中我创建了:
Point p1 = new Point();

我想发送到page2.aspx页面。 我尝试使用以下方式发送:

Response.Redirect("~/page2.aspx?x=p1");

并通过以下方式在第 2 页获取:

Point p2 =Request.QueryString["x"];

它不能工作。你能帮我吗?


Point有哪些属性?需要传输哪些信息? - Glenn Ferrie
你不能在查询字符串中传递一个对象。 - afzalulh
3个回答

6

除了您不能仅将“p1”放入字符串并使其引用类实例之外,您也不能只将对象添加为查询参数。

您需要为Point的每个元素将参数添加到URL中。例如:

Response.Redirect(String.Format("~/page2.aspx?x={0}&y={1}", p1.x, p1.y));

如果您不需要将其作为查询参数使用,也可以使用Session


4

您需要使用Session而不是QueryString。

Session["myPoint"] = p1;

然后在page2.aspx页面上

p2 = (Point)Session["myPoint"]

2

不,你不能直接将对象作为查询字符串传递。这是不可能的。

有三种方法可以在两个aspx页面之间传递数据:

1)使用Response.Redirect() / Server.Transfer()

2)使用session

3)使用公共属性

下面我为每种方法定义了一个示例:

1) using Server.Transfer()

源页面 Default.aspx

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <div>
                <asp:Label ID="lblUsername" runat="server" BorderStyle="None" Font-Bold="True" Font-Names="Garamond"
                    Font-Size="Large" Style="z-index: 100; left: 240px; position: absolute; top: 32px"
                    Text="Username" Width="73px"></asp:Label>
                <br />
                <asp:Label ID="lblPassword" runat="server" BorderStyle="None" Font-Bold="True" Font-Names="Garamond"
                    Font-Size="Large" Style="z-index: 101; left: 237px; position: absolute; top: 80px"
                    Text="Password" Width="80px"></asp:Label>
                <br />
                <asp:TextBox ID="txtPassword" runat="server" Style="z-index: 102; left: 355px; position: absolute;
                    top: 80px" TextMode="Password" Width="151px"></asp:TextBox>
                <asp:TextBox ID="txtUsername" runat="server" Style="z-index: 103; left: 357px; position: absolute;
                    top: 30px" Width="153px"></asp:TextBox>
                <asp:Label ID="lblMessage" runat="server" Font-Bold="False" Font-Names="Bookman Old Style"
                    Font-Size="Medium" Style="z-index: 104; left: 354px; position: absolute; top: 130px"
                    Text="Message :"></asp:Label>
                <asp:Button ID="btnSubmit" runat="server" Font-Bold="True" Font-Names="Garamond"
                    Font-Size="Large" OnClick="btnSubmit_Click" Style="z-index: 106; left: 289px;
                    position: absolute; top: 160px" Text="Submit" />

            </div>
        </div>
    </form>
</body>
</html>

代码后台
using System;
using System.Configuration;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page 
{
    string s1, s2;

    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        s1 = txtUsername.Text;
        s2 = txtPassword.Text;

        if ((s1 == "sa") && (s2 == "123qwe"))
        {
            /*
             * Passing data using QueryString.
             */
            //Response.Redirect("Description.aspx?Username=&Password=" + s1 + " " + s2);
            Server.Transfer("Description.aspx?Username=&Password=" + s1 + " " + s2);
        }
        else
        {
            lblMessage.Text = "Invalid Username and Password";
        }
    }
}

目标页面

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Description.aspx.cs" Inherits="Description" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Label ID="lblResult" runat="server" Font-Bold="True" Font-Names="Garamond" Font-Size="X-Large"
            Height="22px" Style="z-index: 100; left: 307px; position: absolute; top: 19px"
            Text="Result" Width="71px"></asp:Label>
    </div>
    </form>
</body>
</html>

代码后台
using System;
using System.Configuration;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

public partial class Description : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //For Response.Redirect - do this

        //string username = Request.QueryString["Username"];
        //string password = Request.QueryString["Password"];
        //lblResult.Text = "Username : " + " Password : " + password;

        //Below is for Server.Transfer() 

        if (Page.PreviousPage != null)
        {
            TextBox SourceTextBox_1 =
                (TextBox)Page.PreviousPage.FindControl("txtUsername");
            TextBox SourceTextBox_2 =
               (TextBox)Page.PreviousPage.FindControl("txtPassword");
            if (SourceTextBox_1 != null)
            {
                lblResult.Text = SourceTextBox_1.Text + " " + SourceTextBox_2.Text ;
            }
        }

    }
}

2) Response.Redirect()和sessions已经由两位兄弟解释过了,对我来说不需要再讨论了。它们在那里被清楚地解释了。

3) using properties

源页面

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <div>
                <asp:Label ID="lblUsername" runat="server" BorderStyle="None" Font-Bold="True" Font-Names="Garamond"
                    Font-Size="Large" Style="z-index: 100; left: 240px; position: absolute; top: 32px"
                    Text="Username" Width="73px"></asp:Label>
              <br />
                <asp:Label ID="lblPassword" runat="server" BorderStyle="None" Font-Bold="True" Font-Names="Garamond"
                    Font-Size="Large" Style="z-index: 101; left: 237px; position: absolute; top: 80px"
                    Text="Password" Width="80px"></asp:Label>
                <br />
                <asp:TextBox ID="txtPassword" runat="server" Style="z-index: 102; left: 355px; position: absolute;
                    top: 80px" TextMode="Password" Width="151px"></asp:TextBox>
                <asp:TextBox ID="txtUsername" runat="server" Style="z-index: 103; left: 357px; position: absolute;
                    top: 30px" Width="153px"></asp:TextBox>
                <asp:Label ID="lblMessage" runat="server" Font-Bold="False" Font-Names="Bookman Old Style"
                    Font-Size="Medium" Style="z-index: 104; left: 354px; position: absolute; top: 130px"
                    Text="Message :"></asp:Label>
                <asp:Button ID="btnSubmit" runat="server" Font-Bold="True" Font-Names="Garamond"
                    Font-Size="Large" OnClick="btnSubmit_Click" Style="z-index: 106; left: 289px;
                    position: absolute; top: 160px" Text="Submit" />
            </div>
        </div>
    </form>
</body>
</html>

代码后台
using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page 
{
    private string myUserName;
    /*
     * Defining Properties in the source page to be Accessible on the destination page.
     * means Exposing data to other pages using Properties
     * To retrieve data from source page,Destination page must have 
     * <%@ PreviousPageType VirtualPath="~/Default.aspx" %> Directive added below <%@ Page %> Directive

     */
    public string propUserName
    {
        get { return myUserName; }
        set { myUserName = value; }
    }
    private string myPassword;

    public string propPassword
    {
        get { return myPassword; }
        set { myPassword = value; }
    }


    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        if ((txtUsername.Text == "chandan") && (txtPassword.Text == "niit"))
        {
            myUserName = txtUsername.Text;
            myPassword = txtPassword.Text;
        }
       Server.Transfer("Description.aspx");
    }
}

目标页面

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Description.aspx.cs" Inherits="Description" %>
<%@ PreviousPageType VirtualPath="~/Default.aspx" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            &nbsp;
             <asp:Label ID="Label2" runat="server" Text="Password" style="z-index: 100; left: 336px; position: absolute; top: 69px" Font-Bold="True" Font-Size="Larger"></asp:Label>
            <asp:Label ID="Label1" runat="server" Text="UserName" style="z-index: 102; left: 333px; position: absolute; top: 28px" Font-Bold="True" Font-Size="Larger"></asp:Label>
        </div>
    </form>
</body>
</html>

代码后台

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class Description : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Label1.Text = PreviousPage.propUserName;
        Label2.Text = PreviousPage.propPassword;

    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接