|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
有个问题想请教你一下,呵呵:)你觉得将来学什么方向比较好,我真是想不出来,知道的太少了,麻烦了。1、今朝在ASP.NET中页面传值共有这么几种体例:
1、表单提交,
<formaction="target.aspx"method="post"name="form1">
<inputname="param1"value="1111"/>
<inputname="param2"value="2222"/>
</form>
....
form1.submit();
....
此种方在ASP。NET中有效,由于ASP。NET的表单老是提交到本身页面,假如要提交到别一页面,必要特别处置。
2、<Ahref="target.aspx?param1=1111?m2=2222">链接地点传送</A>
吸收页面:stringstr=Request["param1"]
3、Session共享
发送页面:Session("param1")="1111";
按收页面stringstr=Session("param1").ToString();
4、Application共享
发送页面:Application("param1")="1111";
按收页面:stringstr=Application("param1").ToString();
此种办法不常利用,由于Application在一个使用程序域局限共享,一切用户能够改动及设置其值,故只使用计数器等必要全局变量的中央。
5、Cookie
6、Response.Redirect()体例
Response.Redirect("target.aspx?param1=1111?m2=2222")
吸收页面:stringstr=Request["param1"]
7、Server.Transfer()体例。
Server.Transfer("target.aspx?param1=1111?m2=2222")
吸收页面:stringstr=Request["param1"]
2、假如在两个页面间必要大批的参数要传传送,如数据查询等页面时,用1-6的办法传值及其方便,而第7种办法确有一共同的上风!但利用该办法时必要必定的设置,现复杂先容一下该办法的利用体例:
以查询数据页面为例:
在查询页面中设置以下私有属性(QueryPage.aspx):publicclassQueryPage:System.Web.UI.Page
{
protectedSystem.Web.UI.WebControls.TextBoxtxtStaDate;
protectedSystem.Web.UI.WebControls.TextBoxtxtEndDate;
/**//**//**////<summary>
///入手下手工夫
///</summary>
publicstringStaDate
{
get{returnthis.txtStaDate.Text;}
set{this.txtStaDate.Text=value;}
}
/**//**//**////<summary>
///停止工夫
///</summary>
publicstringEndDate
{
get{returnthis.txtEndDate.Text;}
set{this.txtEndDate.Text=value;}
}
privatevoidbtnEnter_Click(objectsender,System.EventArgse)
{
Server.Transfer("ResultPage.aspx");//注重:利用ResultPage.aspx来吸收传送过去的参数
}
}
在显现查询了局页面(ResultPage.aspx):
publicclassResultPage:System.Web.UI.Page
{
privatevoidPage_Load(objectsender,System.EventArgse)
{
//转换一下便可取得前一页面中输出的数据
QueryPagequeryPage=(QueryPage)Context.Handler;//注重:援用页面句柄
Response.Write("StaDate:");
Response.Write(queryPage.StaDate);
Response.Write("<br/>EndDate:");
Response.Write(queryPage.EndDate);
}
}
3、假如有很多查询页面共用一个了局页面的设置办法:
在这类体例中关头在于“QueryPagequeryPage=(QueryPage)Context.Handler;”的转换,只要转换不依附于特定的页面时便可完成。
假如让一切的查询页面都承继一个接口,在该接口中界说一个办法,该办法的独一感化就是让了局页面取得构建了局时所需的参数,便可完成多页面共享一个了局页面操纵!
1、先界说一个类,用该类安排一切查询参数:(*.cs)/**////<summary>
///了局页面中要用到的值
///</summary>
publicclassQueryParams
{
privatestringstaDate;
privatestringendDate;
/**//**//**////<summary>
///入手下手工夫
///</summary>
publicstringStaDate
{
get{returnthis.staDate;}
set{this.staDate=value;}
}
/**//**//**////<summary>
///停止工夫
///</summary>
publicstringEndDate
{
get{returnthis.endDate;}
set{this.endDate=value;}
}
}
2、接口界说:
/**////<summary>
///界说查询接口。
///</summary>
publicinterfaceIQueryParams
{
/**//**//**////<summary>
///参数
///</summary>
QueryParamsParameters{get;}
}
3、查询页面承继IQueryParams接口(QueryPage.aspx):
/**////<summary>
///查询页面,承继接口
///</summary>
publicclassQueryPage:System.Web.UI.Page,IQueryParams
{
protectedSystem.Web.UI.WebControls.TextBoxtxtStaDate;
protectedSystem.Web.UI.WebControls.TextBoxtxtEndDate;
privateQueryParamsqueryParams;
/**//**//**////<summary>
///了局页面用到的参数
///</summary>
publicQueryParamsParameters
{
get
{
returnqueryParams;
}
}
privatevoidbtnEnter_Click(objectsender,System.EventArgse)
{
//赋值
queryParams=newQueryParams();
queryParams.StaDate=this.txtStaDate.Text;
queryParams.EndDate=this.txtEndDate.Text
Server.Transfer("ResultPage.aspx");
}
}
4、别外的页面也云云设置
5、吸收页面(ResultPage.aspx):publicclassResultPage:System.Web.UI.Page
{
privatevoidPage_Load(objectsender,System.EventArgse)
{
QueryParamsqueryParams=newQueryParams();
IQueryParamsqueryInterface;
//完成该接口的页面
if(Context.HandlerisIQueryParams)
{
queryInterface=(IQueryParams)Context.Handler;
queryParams=queryInterface.Parameters;
}
Response.Write("StaDate:");
Response.Write(queryParams.StaDate);
Response.Write("<br/>EndDate:");
Response.Write(queryParams.EndDate);
}
}
3、本文原因:
因在事情中要作一个数据查询,参数烦多,本来是用Session传送,用完该Session传来的参数后,还需清算Session,在用Session之前还得判别该Session是不是存在,极为啰嗦,我想应当另有更烦琐的办法来完成页面间的参数传送,故上彀查找,终究找到如许一种体例来完成页面间的参数传送。
有不到的地方,请人人斧正!
==================================================================================
起首来看HttpContext类:
System.Web.HttpContext类承继自System.Object,按类名来了解,便是Http高低文类.
此类封装了有关单个HTTP哀求的一切HTTP特定的信息。此类为承继IHttpModule和IHttpHandler接口的类供应了对以后HTTP哀求的HttpContext工具的援用。该工具供应对哀求的外部Request、Response和Server工具的会见。
HttpContext类的经常使用大众属性有:
Application,为以后HTTP哀求猎取HttpApplicationState工具。
Current,为以后HTTP哀求猎取HttpContext工具。
Handler,为以后HTTP哀求猎取或设置IHttpHandler工具。
Items,猎取可用于在HTTP哀求过程当中在IHttpModule和IHttpHandler之间构造和共享数据的键值汇合。
Request,为以后HTTP哀求猎取HttpRequest工具。
Response,为以后HTTP呼应猎取HttpResponse工具。
Server,猎取供应用于处置Web哀求的办法的HttpServerUtility工具。
Session,为以后HTTP哀求猎取HttpSessionState实例。
经由过程Page类的Context属性能够取得以后的System.Web.HttpContext工具
<p>接着来看Server.Transer()办法:
经由过程Page类的Server属性类能够Transfer到另外一个页面,如Server.Transfer("NewPage.aspx"),能够跳转到新页面中,
利用Server.Transfer()跳转页面,客户真个URL其实不会改动,只是在服务器端实行新页并输入,因而能够在新页面中经由过程猎取来取得哀求页面传送的工具和表双数据及查询字符串.
假定以后页面为FormerPage.aspx(类名为FormerPage),跳转到的新页面为NewPage.aspx
从FormerPage.aspx跳转的代码以下:
privatevoidbtnToNewPage_Click(objectsender,System.EventArgse)
{
ArrayListlist=newArrayList(3);
list.Add("Thislist");
list.Add("isfor");
list.Add("FormerPagetosee.");
Context.Items["FormerPageList1"]=list;
Server.Transfer("NewPage.aspx");
}
在新页面(NewPage.aspx)Page_Load()事务中经由过程以下代码取得传送的数据:
if(!IsPostBack)
{
try
{
FormerPageformer=(FormerPage)Context.Handler;
txtFromParentPage.Text=former.ClassName;//猎取FormerPage中界说的ClassName大众属性
//猎取在FormerPage中的高低笔墨典中增加的ArrayList:Context.Items["FormerPageList1"]
//猎取Contex字典项并强迫转换范例:
Array我觉得很重要,一般所说的不重要应该指的是:你学好一种以后再学另一种就很容易了。(因为这样大家可能有一个错觉就是语言不是很重要,只要随便学一种就可以了,其实不是这样的。 |
|