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

时间:2013-12-19 18:49:24

标签: c# asp.net parameters

我在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"];

它不起作用。你能帮帮我吗?

3 个答案:

答案 0 :(得分:5)

除了你不能只将“p1”放在一个字符串中并让它引用一个类实例这一事实之外,你不能只是将一个对象添加为一个查询参数。

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

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

或者,如果您不需要Session作为查询参数,则可以使用{{1}}。

答案 1 :(得分:3)

您需要使用Session而不是QueryString

Session["myPoint"] = p1;

然后在page2.aspx

p2 = (Point)Session["myPoint"]

答案 2 :(得分:1)

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

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

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

2)使用会话

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()和session已由两个兄弟解释,因为我无需讨论这个问题。它在那里清楚地解释了

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;

    }
}