2012-07-03 48 views
0

我有被安排在一個特定佈局的用戶控件的網頁上工作的位置。我正在修改該頁面以支持根據用戶的偏好重新排序。所以,實際上,在負載方面,我掌握了我需要定位不同用戶控件的信息。重新排序用戶控件的ASP.NET頁面

我能想到的方法2:

  • 請在客戶端的重新排序。這對於用戶 而言並不理想,因爲他們發現重新排序正在進行。
  • 在服務器端重新排序。這需要我做很多重寫來根據首選項動態加載用戶控件。

有沒有完成什麼,我試圖做的任何其他方式?

+0

這些控件的數據源是什麼?我想象一下,如果它繼承自IEnumerable(實體框架,Linq-to SQL,甚至普通的舊List <>),則可以簡單地更改OrderBy並重新綁定數據源,假設您的佈局是在Repeater或其他類似的控件中完成的。 – Richthofen

+0

他們是用戶控件(ascx)。 – DotnetDude

+0

由於Page.Controls或WhateverContainerObject.Controls對象是IEnumerable,我們可以在那裏排序嗎?類似於 Page.Controls.Cast ().ToList(); 然後清除現有的控件,並使用上述語句做OrderBy或類似的東西。 – Richthofen

回答

0

還有一個更簡單的方法;渲染由父容器渲染它們來控制。可以創建一個容器,並且可以完全控制其子對象的渲染順序(通過重寫RenderChildren方法)。這不是最簡單的選擇,但它可以工作。步驟如下:

  • 創建自ContainerControl
  • 繼承
  • 重寫RenderChildren方法
  • 在這個方法中,它將使在容器中的孩子們,覆蓋它的一類,不調用基類版本,並將實例獲取到控件並呈現它們。這是因爲必須出現併發症的地方。
+0

我將有一種方法來重新定位'RenderChildren'中的用戶控件嗎?這與使用'LoadControl'動態加載它們有何不同? – DotnetDude

+0

動態加載也很好;你可以走這條路。動態加載控件雖然很麻煩,因爲你必須確保每次都按照相同的順序將它們添加到樹中。是的,你按照你想要的順序呈現控件,所以你也可以完全控制它。 –

+0

我不想去動態加載路線。過去並不愉快。你能指點我如何重寫'RenderChildren'指定順序的資源嗎?謝謝 – DotnetDude

1

我會建議重新安排的客戶端,因爲

  1. 您將節省後回來。
  2. 您將使網站無縫。

如何才能做到你

  1. 使用含有所有控件和其他含裝載圖像的主要股利。切換有可視性,同時使用JavaScript重新排列控件,或
  2. 您可以設置可見性:隱藏你的身體,然後重新安排一套知名度後:可見

這種方法的缺點是,你將不得不使用絕對定位。

+0

通過設置可見性在客戶端執行此操作,用戶可以感覺到加載該頁面需要更長的時間,因爲他們必須等待重新排序時發生客戶在我們讓他們看到之前。 – DotnetDude

+0

控件正在重新排列時顯示載入圖像。 –

+0

你也必須小心,因爲在每次回寄時,你都必須重新排列它們。 –

相關問題