2013-01-15 47 views
1

跳過頁面防止用戶我有一個數據輸入表格,我已經碎裂開到5頁,我想確保用戶去通過每一次的正確順序的頁面。導航的設置使其能夠正確地通過它,包括麪包屑返回並更改以前的頁面。但是,我想確保,如果不先瀏覽較早的頁面,它們就不會到達較晚的頁面(即,通過頁面A和B,然後通過直接輸入URL直接跳到D,或者使用D開始書籤)。從一個ASP.NET表單

我已經做了一些嘗試,以防止這種情況,我最晚一班是這一點,這檢查具體到每一個頁面需要會話變量:

public static string CheckForPageSkipping() 
{ 
    var redirectTo = ""; 
    if (HttpContext.Current.Session["TestDate"] == null) redirectTo = "~/Auth/SignOff.aspx"; 
    if (HttpContext.Current.Session["Repairs"] == null) redirectTo = "~/Auth/RepairNotes.aspx"; 
    if (HttpContext.Current.Session["MeterNum"] == null) redirectTo = "~/Auth/TestResults.aspx"; 
    if (HttpContext.Current.Session["PremiseOwner"] == null) redirectTo = "~/Auth/PremiseInfo.aspx"; 
    return redirectTo; 
} 

我每次Page_Load事件期間調用此和重定向到如果頁面不是他們所在的頁面,則返回頁面。這幾乎奏效了,直到我意識到它阻止了你向後導航(它總是會將你發回到你尚未完成的最新頁面)。我確信我可以湊齊一些東西來完成這項工作,但我想看看是否有更好的方法來做到這一點。內置於ASP.NET的東西,或者某人過去構建的更優雅的東西。

我在Google和StackOverflow上的搜索嘗試都沒有得到有用的結果。也許我使用的是錯誤的術語,但主要是我在這裏寫的東西(現在頂部提出的建議也沒有幫助)。

+0

你有沒有想過使用'Server.Transfer'在頁面之間轉換?網址沒有變化,你可以加載你喜歡的任何頁面。 –

+0

我沒有想到這一點(不知道我知道這個功能)。看起來很有希望。我將不得不再看一看。謝謝! – techturtle

+0

好的,也許我沒有實現它,但是當我用'Server.Transfer'替換了我的'Response.Redirect'語句時,它似乎首先起作用,但是接下來發生的事情是所有頁面只顯示一個頁面在地址欄後面。所以從頁面A移動到頁面B仍然在地址欄中顯示A,但是當從B移動到C時,它在地址欄中顯示B. – techturtle

回答

1

好像你的網頁,爲什麼不擺脫他們的控制,把代碼放到用戶控件,在面板或佔位符,一個頁面註冊這些控件和控制這些面板的可見性的代碼,以便你可以正確執行這些訪問的順序?

1

你有沒有看着內置控制<asp:wizard>?我認爲它會適合您的需求,並且您可以爲許多不同的場景配置它。 下面是說明其使用的鏈接:http://msdn.microsoft.com/en-us/magazine/cc163894.aspx

也看到目前官方文檔:MSDN Library

+0

當我第一次開始這個項目時,我確實記得使用這個想法。不記得我爲什麼沒有。我想這是因爲我使用的一些表格的複雜性和動態字段生成。我正在閱讀你發佈的文章,看看它是否值得轉換回去。 – techturtle

0

如果你不想使用Wizard控制和你不希望使用Panel S,無論是服務器。轉發或跨頁面發佈應該可以工作。無論採用哪種方法,檢查PreviousPage都應該覆蓋您的頁面,以避免擔憂。

Server.Transfer方法有你提到的網址古怪,但在其他方面非常簡單。

Cross-Page Posting相當適當根據您的需要爲好。

  1. 後每個表單到下一個表單頁面。
  2. 在那裏接收並處理數據(如果您正確設置了 ,則使用強打字)。
  3. 只有當所有內容檢出時才加載新頁面(PreviousPage爲 正確,數據有效)。

我承認,我自己並沒有直接使用這兩種方法的經驗,但我可以看到他們如何實施來處理您的情況。

相關問題