我需要幫助,因爲我沒有找到我正在使用MVVM的項目的解決方案。 一方面,我有一個Default.aspx,它包含一個具有兩個用戶控件的UpdatePanel。第一個控件是一個帶有一些要過濾的字段的FilterControl。 第二個控件是一個GridView,當我按下FilterControl中的按鈕搜索時,它允許從數據庫分頁和填充數據。假設查詢返回100條記錄。因此,如果我將PageSize設置爲20個結果,那麼我的GridView中有5個頁面正常?返回列表上一頁下一頁.NET中的控件問題
另一方面,我有一個FormView的詳細信息頁面,從GridView中接收一個項目的Id參數,並顯示有關它的信息。就在asp:FormView代碼的上面,我有另一個用戶控件,它通過相應的ViewModel從Session變量中的GridView中獲取數據,並計算哪些項目應該是下一個和上一個,因此我有一個「Back to List」鏈接和「上一個「和」下一個「鏈接。上一個和下一個鏈接正確加載。它們是帶有OnClick事件的LinkButton,它使Response.Redirect(PrevLink);例如,其中PrevLink是頁面重定向的鏈接〜/ details.aspx?Id = 5)。
我在整個eventHandler和HistoryEventArgs中異步控制導航,所以當我按下瀏覽器的後退按鈕時,一切都很好,我在default.aspx頁面中獲得了期望的結果。無論何時在默認頁面觸發回發,例如在更改gridview的頁面索引或在過濾器中執行新查詢時,我都會調用ScriptManager的AddHistoryPoint並保存多個鍵和值(篩選字段,頁數,等等)。
問題出在我按下Back to List LinkButton時。我希望數據與進入詳細信息頁面之前的數據相同。我在這個按鈕的OnClick事件中有Response.Redirect(「〜/ default.aspx」)。
你對如何管理這個有什麼想法嗎?
非常感謝!從這裏的答案
複製的代碼謝謝你的答案。 @Guvante我不想在客戶端放置「返回列表」,因爲當我編輯詳細信息頁面時,導航控件的visible屬性設置爲false。我想我沒有正確表達自己。但是我沒有在aspx頁面的OnClick事件中使用Response.Redirect。我在頁面的源代碼中有OnClick = lkbBackToList_Navigate。
我有它在以這種方式代碼隱藏:
protected void lkbNext_Navigate(object sender, EventArgs e)
{
Response.Redirect(NavigationViewModel.NextUrl);
}
protected void lkbPrevious_Navigate(object sender, EventArgs e)
{
Response.Redirect(NavigationViewModel.PreviousUrl);
}
protected void lkbBackToList_Navigate(object sender, EventArgs e)
{
Response.Redirect(NavigationViewModel.BackToListUrl);
}
@msarchet this is some of my code in default.aspx code behind. When I do postback I save the state of the filters, pageindex and so on in session
public event EventHandler<HistoryEventArgs> CaptureClientBrowsing;
protected void Page_OnInit(EventArgs e)
{
this.CaptureClientBrowsing += new EventHandler<HistoryEventArgs>(CaptureClientBrowsing_Event);
}
protected override void SaveDataInSession()
{
SaveInSession("FilterViewModel", this.FilteringControl.ViewModel);
SaveInSession("PageIndex", this.CurrentPageIndex); //CurrentPageIndex is a property with the page index of the gridview
}
protected void CaptureClientBrowsing_Event(object sender, HistoryEventArgs e)
{ LoadDataFromSession(e.State); //e.State is a NameValueCollection with the values stored in session for example FilterViewModel has the user control FilteringControl and "PageIndex" has the page index of the gridview ControlsDataBinding();
}
的SaveInSession方法只是保持會話[鍵] =對象,其中鍵是一個字符串,因爲它遵循:
string key = string.Format("{0}.{1}.{2}", this.GetType(), nameValue, index);
一個例子關鍵的是
"ASP.customers_default_aspx.PageIndex.1"` so `Session[key]=1
如果我在其他頁面點擊(例如頁碼6)電網訴查看關鍵變量的值將是
"ASP.customers_default_aspx.PageIndex.2"` and `Session[key]=5
這裏是我卡住的地方。如果我從詳細信息頁面瀏覽到默認頁面,並在瀏覽器中點擊,CaptureClientBrowsing_Event
火災和控件加載正確,並且過濾器的值也被加載。
我想要的是當我點擊LinkButton「返回列表」時,控件和過濾器也會被加載。如果我沒有歷史參數,如何獲得NameValueCollection?如果我點擊三下,然後點擊Bak以列出如何知道要加載的會話值?
也許有很多問題,這很難處理,但我試圖成爲最具體的我可以。
你可以展示一些代碼 – msarchet
@msarchet我已經把一些代碼的,也許你可以幫我 – Alvmad