2月到新的公司上班,開始的任務是熟悉公司一直在做的項目。並且修改原項目中存在的一些不方便的操作,就是改善用戶體驗。
其中有個任務就是解決頁面返回的問題,開始他們使用的全是goback();的方法。按照項目的設計,每一個功能都是跳轉到一個新的頁面(不是在新窗口中打開)。
這樣最後使用起來就會有一個很不好的體驗。比如,我進入到一個頁面,選擇了N多查詢條件以後,會有個結果列表,點具體信息的時候,會跳轉到一個詳細信息頁面(非新窗口),我在這個詳細頁面進行信息修改。這個時候操作完畢。需要返回到結果列表頁面。就需要點2次按鈕。這樣操作者就會覺得很麻煩。所以我建議不使用我們項目現在用的這個方法,任何新功能都跳轉到一個新的頁面。
推薦幾種方法
1:在同一個頁面,工具功能,顯示和隱藏不同的PANL。不涉及到頁面之間傳值
2:在新窗口中打開
3:使用彈出層
4:視圖狀態
5:post數據到詳細頁面,然後在詳細頁點返回的時候再post回來,不過這樣就不太符合asp.net了
但是我的項目不可能大改,只能在原來的基礎上改了。改的辦法有很多種
1:SESSION,不推薦,會影響程序性能
2:URL參數:不安全,因為參數會暴露在外面
3:通過HttpContext.Current.Handler來獲取
附上一小段代碼,讓大家理解
public partial class Serach : System.Web.UI.Page
{
protected void Page_Load( object sender, EventArgs e )
{
if ( !IsPostBack )
{
Result result;
if ( HttpContext.Current.Handler is Result )
{
result = HttpContext.Current.Handler as Result;
Response.Write( result.text );
}
}
}
public string datatime
{
get { return this.TextBox1.Text; }
set { this.TextBox1.Text = value; }
}
protected void Button1_Click( object sender, EventArgs e )
{
Server.Transfer( "Result.aspx" );
}
}
//查詢頁面
public partial class Result : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if ( !IsPostBack )
{
Serach serach;
if ( HttpContext.Current.Handler is Serach )
{
serach = HttpContext.Current.Handler as Serach;
this.HiddenField1.Value=serach.datatime ;
}
}
}
public string text
{
get { return this.HiddenField1.Value; }
set { this.HiddenField1.Value = value; }
}
protected void btnText_Click( object sender, EventArgs e )
{
Server.Transfer( "Serach.aspx" );
}
}
//結果頁面
這樣你可以保存你最初的查詢SQL語句,返回的時候再重新加載SQL語句
4:Server.transfer配合previouspage屬性
page類有個previouspage屬性,這樣你可以獲取上個頁面的信息了
if ( Page.PreviousPage != null )
{
ContentPlaceHolder content = ( ContentPlaceHolder ) Page.PreviousPage.Master.FindControl( "UIContentAreaPlaceHolder" );
//Response.Write( hf.Value );
if ( content != null )
{
HiddenField hf = ( HiddenField ) content.FindControl( "hfsql" );
if ( hf != null )
{
this.hfSql.Value = hf.Value;
//本人加載SQL語句的方法
LoadDataIntoGridView();
}
}
}
可以將你要保存的信息放在一個HiddenField中來保存。然後使用Server.transfer跳轉到另外的頁面時候可以通過previouspage屬性找到上個頁面保存信息的控件來獲取
我這次使用的就是這個辦法