目前在维护一个Web应用,感觉做页面间的导航确实麻烦,特别是页面间参数的传递,如果写的不好,看起来很是头疼。
正好有个机会,经理让把有些页面做成模式页面,打开模式页面仅仅能传递一个参数,当然这个参数可以是对象。但是如果为了传递参数就去构造很多类,又感觉太麻烦。
灵机一动,想了如下方法,目前运行良好,和大家分享。有不合适的地方,请批评指正。
此方法是为要打开的页面类添加个静态方法,例如有MsgInfo.aspx页面:
public static void Open(ParaType1 para1, (ParaType2 para2, string msgInfoUrl, Page thePage)
{
// 为页面静态变量复制
// 打开页面
}
其中前两个是传递的页面参数(当然多个也行了),第三个是要打开MsgInfo.aspx页面的页面相对于MsgInfo.aspx的相对url。如果在同一目录下,直接写MsgInfo.aspx就行了,第四个参数为要打开MsgInfo.aspx页面的页面Page对象。
优点:
使用方便,直接使用MsgInfo.Open(..)方法就行了。
可以传递任意多个参数,很适合打开模式页面。
传递的参数是强类型的,避免很多不必要的麻烦。
缺点:
使用了较多的静态变量,为了去除其负面影响,我一般在Page_Load()方法中加了 this.Response.Expires = 0;
注意:
有的时候我还想通过以前的方法实现页面导航,这是还想传递页面参数,我是通过以下方式处理的:
为每个参数写一个Get方法,在此方法中优先处理页面参数,如果没有页面参数,再处理Open方法传递的静态变量。
private string GetPara()
{
if(this.Page.Request.QueryString["Para"] == null)
{
// 返回静态变量
}
// 返回查询参数
}
正好有个机会,经理让把有些页面做成模式页面,打开模式页面仅仅能传递一个参数,当然这个参数可以是对象。但是如果为了传递参数就去构造很多类,又感觉太麻烦。
灵机一动,想了如下方法,目前运行良好,和大家分享。有不合适的地方,请批评指正。
此方法是为要打开的页面类添加个静态方法,例如有MsgInfo.aspx页面:
public static void Open(ParaType1 para1, (ParaType2 para2, string msgInfoUrl, Page thePage)
{
// 为页面静态变量复制
// 打开页面
}
其中前两个是传递的页面参数(当然多个也行了),第三个是要打开MsgInfo.aspx页面的页面相对于MsgInfo.aspx的相对url。如果在同一目录下,直接写MsgInfo.aspx就行了,第四个参数为要打开MsgInfo.aspx页面的页面Page对象。
优点:
使用方便,直接使用MsgInfo.Open(..)方法就行了。
可以传递任意多个参数,很适合打开模式页面。
传递的参数是强类型的,避免很多不必要的麻烦。
缺点:
使用了较多的静态变量,为了去除其负面影响,我一般在Page_Load()方法中加了 this.Response.Expires = 0;
注意:
有的时候我还想通过以前的方法实现页面导航,这是还想传递页面参数,我是通过以下方式处理的:
为每个参数写一个Get方法,在此方法中优先处理页面参数,如果没有页面参数,再处理Open方法传递的静态变量。
private string GetPara()
{
if(this.Page.Request.QueryString["Para"] == null)
{
// 返回静态变量
}
// 返回查询参数
}