我在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"];
它不起作用。你能帮帮我吗?
答案 0 :(得分:5)
除了你不能只将“p1”放在一个字符串中并让它引用一个类实例这一事实之外,你不能只是将一个对象添加为一个查询参数。
您需要为Point
的每个元素的URL添加参数。例如:
Response.Redirect(String.Format("~/page2.aspx?x={0}&y={1}", p1.x, p1.y));
或者,如果您不需要Session
作为查询参数,则可以使用{{1}}。
答案 1 :(得分:3)
答案 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>
<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;
}
}