2011-08-10 178 views
0

我的工作對我的工作的事件管理系統,它的基本功能是讓人們在我的辦公室到新的事件上傳到系統,跟蹤他們,並對其進行編輯。維護視圖狀態

這是大部分完整的,現在我在清理系統,使其更加用戶友好的點。我遇到的最大問題之一是保持視圖狀態。我目前使用一個搜索頁面來過濾所有的事件結果,用戶可以按日期,日期範圍,客戶端等進行搜索,只要用戶停留在頁面上,系統就會按預期工作,並且所有的搜索功能設置停留像他們一樣。

有一些功能,例如打開一個新的頁面(同一窗口),其中該事件被編輯並保存編輯鏈接。這也按預期工作,我將一個queryString傳遞給頁面,告訴系統要編輯哪一個。問題是後退按鈕。如果我使用的只是鏈接到搜索頁的鏈接,我失去我的所有設置,如果你想看到你剛纔的事件中所做的更改這是一種惱人的,我試過一個JavaScript回其維持你的瀏覽狀態,但頁面不會刷新,因此在用戶刷新之前不會顯示任何編輯。

有3次我在此頁面上使用外部鏈接,雖然它不是一個交易斷路器,只是輕度煩人,我想弄清楚它,因爲它一直困擾我一段時間。我也嘗試在頁面中進行編輯,但無法更容易地理解,我認爲這將更容易解決。

謝謝您的閱讀,希望有人能爲我點了正確的方向這一點,我非常新的ASP.net和我的任何信息肯定是有幫助的!

+0

你可以張貼一些示例代碼這樣我就可以得到你所遇到的問題的一個更好的主意嗎? –

+0

這真的不是一個代碼問題,我只是想知道是否有一種方法來保持一個頁面的視圖狀態,當你在離開一段時間後回到它,比如在一個會話中。 – Gordnfreeman

+0

它可能與代碼有很大關係。我其實認爲這與代碼有關。你尋求幫助,對吧? –

回答

1

視圖狀態只在當前形式(它包含一個隱藏的輸入字段內)的範圍內是否存在。這意味着Viewstate本身不會有幫助(任何時候你得到的頁面 - 不是後期 - 它將有一個新的Viewstate)。但有幾個選項。其中最容易使用Session來存儲搜索查詢的上下文(日期,日期範圍,客戶端等)。它存在於服務器端,可以在加載頁面時使用。維護您的搜索查詢的另一種方式是利用瀏覽器維護歷史的方式。您可以將哈希(#)代碼添加到您的url的末尾,然後可以通過javascript讀取。 Backbone.js路由和歷史記錄功能以這種方式工作。但是,這是一個非常複雜的解決方案,因爲它通常用於異步請求。這兩種可能的選項都有一些注意事項(Session會在會話cookie的生命週期中生存),但是如果移除Viewstate(Page.EnableViewState = false),則您的請求/響應網絡佔用空間將更小。

下面是一些骨幹路由代碼:

$(document).ready(function() { 
    Backbone.history.start(); 
}); 

// create some routes 
var DynamicWorkspace = Backbone.Router.extend({ 
     routes: { 
      "search/:date": "search", 
      "search/:date/:range": "search", 
      "search/:date/:range/:client": "search" 
     }, 

     search: function(date, range, client) { 
      // make a request to your server with the queries 
     } 
    }); 

var dynamicRouter = new DynamicWorkspace; 

var currentDate = ''; 
var currentRange = ''; 
var currentClient = ''; 

// call this via javascript from a page element 
function setDate(value) { 
    currentDate = value; 
    return updateNavigation(); 
} 

// call this via javascript from a page element 
function setDateRange(value) { 
    currentRange = value; 
    return updateNavigation(); 
} 

// call this via javascript from a page element 
function setClient(value) { 
    currentClient = value; 
    return updateNavigation(); 
} 

function updateNavigation() { 
    // change the browser url to our known route 
    dynamicRouter.navigate('search/' + currentDate + '/' + currentRange + '/' + currentClient, true); 
    return false; 
} 
+0

感謝您的信息,我將嘗試使用會話方法,因爲這似乎是目前最簡單和最好的方式 – Gordnfreeman