2010-02-03 165 views
1

我有一個顯示兩個文本文件之間差異的asp頁面(Default.aspx)。它包含兩個下拉列表(分別爲ID =「File1」和「File2」)和一個按鈕(ID =「提交」)。ASP.NET Web應用程序中URL重定向的最佳實踐

它還包含一個ID爲「Result」的Literal控件。

根據物理應用程序路徑中存在的文件填充列表按鈕的內容。

每次點擊提交按鈕,我想給在文字控制的差異/比較的結果,所以我有一個事件處理程序是這樣的:

protected void Submit_Click(object sender, EventArgs e) 
{ 
    Result.Text = CompareFiles(File1.SelectedValue, File2.SelectedValue); 
} 

這樣做的問題是,您無法將特定文件之間的比較結果加入書籤。

爲了解決這個問題,我將所選文件的值作爲查詢字符串附加到URL並執行重定向。因此,改變上述事件處理程序是這樣的:

protected void Submit_Click(object sender, EventArgs e) 
     { 
      string build1 = DropDownList1.SelectedValue; 
      string build2 = DropDownList2.SelectedValue; 

      string queryString = 
       String.Format("?file1={0}&file2={1}",HttpUtility.UrlEncode(build1),HttpUtility.UrlEncode(build2)); 

      string redirectionUrl = Request.Url.AbsolutePath + queryString; 

      Response.Redirect(redirectionUrl, true); 
     } 

因此堪稱「的Page_Load」事件處理程序「CompareFiles」的方法。所以現在,您可以將比較結果加入書籤並直接重新加載,因爲URL將包含要比較的文件。

但問題是每次重定向發生時「IsPostBack」屬性都是false。因此,每次都會評估DropDownLists(存在於物理應用程序目錄中的文件)的值。

如果它是來自同一頁面的重定向,我不希望發生這種情況。我怎樣才能做到這一點?我只希望它在第一次訪問頁面或從其他頁面訪問頁面時發生。

這是不好的做法?我的意思是重定向到同一頁面。我可以通過在不同的頁面中提供結果來避免這個問題,但是我想這樣做,因爲我希望DropDownLists和「提交」按鈕始終在那裏。

回答

2

既然你重定向到同一個頁面,它不是一個回發,視圖狀態丟失,並且必須重新綁定的內容。

很可能,只需將DropDownLists的值放入緩存中,然後就可以從緩存中加載,並且只有在不存在緩存時纔會命中文件系統。

0

晉升評論回答:

Request.UrlReferrer 
+0

我會在這裏修改你的筆記,每次都是新的頁面請求,他必須每次加載下拉。 – 2010-02-03 15:44:37

+0

如果Page_Init事件處理程序看起來像您提供的處理程序,那麼在加書籤的頁面打開的情況下。那麼只有結果會被渲染,而下拉列表的渲染和評估將不會完成。 在任何情況下,每次發生重定向時都會調用Page_Init事件處理程序和Page_Load事件處理程序。所以無論我在哪裏放置代碼,每次重新加載時都會執行它們。 問題歸結爲如何檢測從同一頁面觸發的重定向。 – Poulo 2010-02-03 16:39:30

+0

'Request.UrlReferrer'? – 2010-02-03 17:39:04

相關問題