asp.net页面传值方法分享

发布时间:2020-12-24编辑:脚本学堂
本文介绍下,asp.net页面传值的几种方法,包括使用QueryString变量、使用Session变量、使用Cookie对象变量、使用Application 对象变量等。有需要的朋友参考下。

1,使用QueryString变量
QueryString传值简单易用,但是它将传递的值显示在浏览器的地址栏中,如果是传递一个或多个安全性要求不高或结构简单的数值时,可以使用此方法。
例如:
 

复制代码 代码示例:
Response.Redirect( "target.aspx?param1=hello&param2=hi ")

接收页面:
 

复制代码 代码示例:
string str=Request.QueryString["param1"];
string str1=Request.QueryString["param2];

2,使用Cookie对象变量(Cookie保存在客户端)
设置Cookie:
 

复制代码 代码示例:
HttpCookie cookie_name = new HttpCookie("name");
cookie_name.Value = Label1.Text;
Reponse.AppendCookie(cookie_name);

获取Cookie:
 

复制代码 代码示例:
string name= Request.Cookie["name"].Value.ToString();

3,使用Session变量(session保存在服务器端)
设置Session:
 

复制代码 代码示例:
Session["name"] ="hello";

获取Session:
 

复制代码 代码示例:
string name = Session["name"].ToString();

4,使用Application 对象变量
Application对象的作用范围是整个全局,对所有用户都有效。
不常使用,因为Application在一个应用程序域范围共享,所有用户可以改变及设置其值,故只应用计数器等需要全局变量的地方。

设置Application :
 

复制代码 代码示例:
Application["name"] = ="hello";

获取Application :
 

复制代码 代码示例:
string   name = Application["name"].ToString();

5,PostBackUrl()方法
default.aspx页面:
 

复制代码 代码示例:
<asp:Button ID="Button1" Runat="server" Text="PostToAnotherPage" PostBackUrl="~/Default2.aspx" />

efault2.aspx页面:
 

复制代码 代码示例:
if (PreviousPage != null)
{
   TextBox textBox1 = (TextBox)PreviousPage.FindControl("TextBox1");
   Response.write(textBox1.Text );
}

6,使用Server.Transfer方法
面象对象开发所使用的方法,其使用Server.Transfer方法把流程从当前页面引导到另一个页面中,新的页面使用前一个页 面的应答流,所以这个方法是完全面象对象的,简洁有效。
以下展示在需要很多个参数时使用的方法,如果参数比较少就没必要使用此方法了。
如果让所有的查询页面都继承一个接口,在该接口中定义一个方法,该方法的唯一作用是让结果页面获得构建结果时所需的参数,即可实现多页面共享一个结果页面操作!

1、先定义一个类,用该类放置所有查询参数:
 

复制代码 代码示例:

/**//// <summary>
/// QueryParams 的摘要说明
/// </summary>
public class QueryParams
{
private   string   firstName;
private   string   lastname;
private   int    age;

public string Firstname
{
get { return this.firstname; }
set { this.firstname = value; }
}
public string LastName
{
get { return this.lastname; }
set { this.lastname = value; }
}
public string Age
{
get { return this.age; }
set { this.age = value; }
}
}

2、接口定义:
 

复制代码 代码示例:
/**////   <summary >
///   定义查询接口。
///   </summary >
public interface IQueryParams
{
/**////   <summary >
///   参数
///   </summary >
QueryParams Parameters { get;}
}

3、查询页面继承IQueryParams接口(QueryPage.aspx):
 

复制代码 代码示例:
<form id="form1" runat="server">
<div>
<asp:TextBox ID="txtFirstName" runat="server"></asp:TextBox>
<asp:TextBox ID="txtLastName" runat="server"></asp:TextBox>
<asp:TextBox ID="txtAge" runat="server"></asp:TextBox>
<asp:Button ID="btnEnter" runat="server" Text="Button" OnClick="btnEnter_Click" /></div>
</form>

QueryPage.aspx.cs
 

复制代码 代码示例:

public partial class QueryPage : System.Web.UI.Page, IQueryParams
{
private QueryParams queryParams;

public   QueryParams   Parameters
{
get
{
return   queryParams;
}
}

public   void   btnEnter_Click(object   sender,   System.EventArgs   e)
{
//赋值
queryParams   =   new   QueryParams();
queryParams.FirstnName = this.txtFirstName.Text;
queryParams.Lastname = this.txtLastName.Text;
queryParams.Age = this.txtAge.Text;
Server.Transfer( "ResultPage.aspx ");
}
protected void Page_Load(object sender, EventArgs e)
{ }
}

4、接收页面(ResultPage.aspx):
ResultPage.aspx.cs
 

复制代码 代码示例:

public partial class ResultPage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
QueryParams queryParams = new QueryParams();
IQueryParams queryInterface;
//实现该接口的页面
if (Context.Handler is IQueryParams)
{
queryInterface = (IQueryParams)Context.Handler;
queryParams = queryInterface.Parameters;
}

Response.Write("FirstName: ");
Response.Write(queryParams.FirstName);
Response.Write(" <br/ >Lastname: ");
Response.Write(queryParams.LastName);
Response.Write(" <br/ >Age: ");
Response.Write(queryParams.Age);
}
}

1、在CallBack之后保持滚动条的位置
在Asp.Net1.1中,CallBack之后保持滚动条的位置是一件非常痛苦的事情,特别是页中有一个Grid 并且想要编辑特定的行。为了不停留在想要得行,页面会重新加载并且必须在顶部向下滚动。在Asp2.0中,只需要简单的在页面的属性中加入 MaintainScrollPostionOnPostBack属性即可:
 

复制代码 代码示例:
<%@ Page Language="C#" MaintainScrollPositionOnPostback="true" AutoEventWireup="true" CodeFile="" Inherits="" %>

2、页面加载后设置默认焦点到控件上
不需要javascript的辅助即可完成。
如果在页面中有一两个textbox,为何要让用户去点击textbox来开始输入数据呢?
可以考虑使用HtmlForm控件的 DefaultFocus属性,让光标已经停留在textbox进而可以输入数据。
 

复制代码 代码示例:
<form id="frm" DefaultFocus="txtUserName" runat="server">
</form>

3、用户点击“Enter”键时触发默认按钮的click实践。
在Asp1.1中,想要使用户点击“Enter”键就能关联到一个button的服务器段的click事件需要借助于javascript。
现在可以使用HtmlForm控件的DefaultButton属性来设置。

此属性也可以设置到 Panel控件上,当用户移动到页面中不同的Panel上,点击enter键来触发不同的button控件的click事件。
 

复制代码 代码示例:
<form id="frm" DefaultButton="btnSubmit" runat="server">
</form>

4、简单的寻找固定的控件。
在页面的控件中按层次寻找控件很痛苦,但是如果知道控件怎样固定在页面中,就可以用简写”$”来查找控件而不用写递归的代码。
看下面的这段代码,注意”$”的使用:
 

复制代码 代码示例:
<form id="form1" runat="server" DefaultFocus="formVw$txtName">
<div>
<asp:FormView ID="formVw" runat="server">
<ItemTemplate>
Name:
<asp:TextBox ID="txtName" runat="server"
Text='<%# Eval("FirstName") + " " + Eval("LastName") %>' />
</ItemTemplate>
</asp:FormView>
</div>
</form>

此小技巧也可以用在服务器端的 使用FindControl()函数时:
 

复制代码 代码示例:
TextBox tb = this.FindControl("form1$formVw$txtName") as TextBox;
if (tb != null)
{
//Access TextBox control
}

5、强类型访问跨页提交的控件
这个比其他的要内容多一点,但是很有用。ASP.NET 2.0引入了交叉回发的概念使得一个页面可以将信息回发到另一个不同的页面,可以将button控件的PostBackUrl属性设置为接受回发数据的页 面来完成。一般的,回发的数据可以象前一页那样做一些事情。但是,如果你要获得前一页制定控件的属性就需要一个cast(),如果你给引起回发的 code-behide页面添加了一个公共属性,你就可以直接以强类型的方式添加PreviousPageType来指向引起回发的页面从而能够访问那个 属性。

如果有一个页面Default.aspx,他有一个公共属性来返回此页面上一个TextBox,数据回发目的页(SearchResults.aspx)可以以强类型的方式(不需要FindControl() 方法),在页面的顶部添加:
 

复制代码 代码示例:
<%@ PreviousPageType VirtualPath="Default.aspx" %>
 

这样,SearchResults.aspx中代码就可以以强类型的方式访问Default.aspx的TextBox。下面的例子假定Default.aspx定义的属性名为SearchTextBox:
TextBox tb = PreviousPage.SearchTextBox; PreviousPageType还有一个TypeName属性,你可以定义一个基本类型,一个或多个页面从此类型继承下来,使得这种技术可以在多页面上使用。
PreviousPage.IsCrossPagePostBack可以判断是否为垮页提交。

对于跨页提交的补充:
在ASP.NET 1.X 版本中,页面都是提交到自己本身,并不能方便的指定需要提交的目的页面。例如FirstPage.aspx中的button只能提交到 FirstPage.aspx,而不能提交到SecondPage.aspx。很多时候,ASP.NET 1.X这样工作方式使我们的开发方式受到不少限制。熟悉ASP/JSP/PHP的朋友大概很不习惯,因为以前经常使用的提交方式突然无法使用,虽然也有解 决这个问题的方法(欲详细了解的读者可去微软网站收看webcast),可是过程太烦琐,不甚方便。令我们高兴的是,ASP.NET 2.0中有了跨页面提交的简单方法。可在第一个页面中的button添加PostBackUrl属性设置为接受提交的页面,并且这个页面增加 PreviousPageType 指令,若要是目标页面在新窗口中打开则可以在源页面<form>标记增加target=’_blank’属性。

6、强类型访问母版页的控件
PreviousPageType指令并不是唯一的可以强类型访问控件的方法。如果在母版页中定义了一个公共属性, 并且想要以强类型的方式访问它,那么就可以在页面顶部添加MasterType指令(注意:MasterType指令同PreviousPageType 一样允许定义一个TypeName)
 

复制代码 代码示例:
<%@ MasterType VirtualPath="MasterPage.master" %>
 

你可以在内容页书写如下的代码来访问目标母版页的属性:
 

复制代码 代码示例:
this.Master.HeaderText = "Label updated using MasterType directive with VirtualPath attribute.";

7、Validation groups验证组
一个页中可能有多个控件和多个按钮。当其中的一个按钮被点击后想要特定的validator被激发而不是页面中的所 有validator。在ASP.NET 1.1中除了hack code没有更好的办法。ASP.NET 2.0中给所有的validator控件和按钮(button、linkbutton等等)增加了ValidatorGroup属性,就可以轻松地解决这 个问题。如果在页面中有一个TextBox并且紧挨着他有一个requiredFieldValidator 和Button控件,可以将RequiredFieldValidator和Button的ValidationGroup属性设置成一样的值从而使得点 击button时只触发这个RequiredFieldValidator的validor,任何没有定义在ValidationGroup内的其他的 validator都会被忽略。
示例:
 

复制代码 代码示例:
<form id="form1" runat="server">
Search Text: <asp:TextBox ID="txtSearch" runat="server" />
<asp:RequiredFieldValidator ID="valSearch" runat="Server"
ControlToValidate="txtSearch" ValidationGroup="SearchGroup" />
<asp:Button ID="btnSearch" runat="server" Text="Search"
ValidationGroup="SearchGroup" /> .
Other controls with validators and buttons defined here
</form>