2009-05-03 15 views
5

有人可以嘗試推薦下面的請求最好的行動起因:.Net Repeater對於單個對象等效嗎?

我已經創建了一些使用Repeater類作爲基地的擴展類,並喜歡這樣做的靈活性,易用性和結果。我現在想要做的是爲單個對象創建一個類似的自定義Web控件(即DataSource不實現IListSource或IEnumerable)。我創建了我試圖通過擴展中繼器來實現的結構,然後使用1項目列表來設置數據源來保存對象,然後進行數據綁定。

e.g a rough example: 

    Dim oObj as New MyObject(1) 
    Dim gl As New Generic.List(of MyObiect)() 
    gl.Add(oObj) 
    rpt.DataSource = gl 
    rpt.DataBind() 

這似乎像周圍的事物,我想什麼,能夠做一個小黑客如下:

e.g new call, where my control is the new custom control: 

    Dim oObj as New MyObject(1) 
    myControl.DataSource = oObj 
    myControl.DataBind() 

我希望能夠定義各種變量這種自定義控件性能,其結果將具有以下類型的佈局:

<My:ObjControl ID="frm" runat="server"> 
    <Tabs> 
     <My:Tab name="Details"> 
      <Items> 
       <My:Item Type="Text" Label="First Name" Property="FirstName" /> 
       <My:Item Type="Text" Label="Last Name" Property="LastName" /> 
       <My:Item Type="Text" Label="Title" Property="Title" /> 
      </Items> 
     </Tab> 
     <My:Tab name="Address"> 
      <Items> 
       <My:Item Type="Text" Label="Address 1" Property="Address1" /> 
       <My:Item Type="Text" Label="Address 2" Property="Address2" /> 
       <My:Item Type="Text" Label="Address 3" Property="Address3" /> 
      </Items> 
     </Tab> 
    </Tabs> 
</My:ObjControl> 

該實現使用WebForms的發生,雖然它看起來像使用MVC將是理想的方法考慮到以上情況。通過這樣做,我想創建一個靈活的WebControl,它使用反射(可用於實現特定接口的所有類),每次需要時只生成所需的三行代碼(上面)。

我應該只是添加一個屬性到一個自定義的中繼器(數據對象),它需要一個對象並相應地設置數據源並節省我的時間?或者,還有更好的方法?

希望這一切都有道理!

乾杯, 史蒂夫

回答

5

你想辦法很難去了解該轉發器希望有一個列表的事實,你想給它1個實例。只需將它包裝在一個新的List * oObj中)並繼續。它一直都在做。

我當然不知道他們到底在用那個自定義的服務器控件。在我看來,你正在努力再次努力。

<asp:repeater id="whatever" runat=server> 
    <ItemTemplate>First Name: <%# DataBinder.Eval(Container.DataItem,"FirstName") %></ItemTemplate> 
</asp:repeater> 
+0

好吧,想想過程非常困難,但是我的控制能夠實現的是產生一個帶有兩個鋰標籤「詳細信息」和「地址」的頁面,它們可以在每個標籤之間進行選項卡標籤和匹配可以更新對象的表單元素。你所表現的完全錯過了這一點 - 可能是我在問題措詞上的錯。 當然在你的例如我可以做:Eval(「FirstName」)。 – stibstibstib 2009-05-03 19:59:09

2

我完全理解你的觀點,stibstibstib。我也希望ASP.NET Framework帶有一個模板驅動的服務器控件,如ListView,但是對於單個數據對象。看起來沒有必要,並且感覺有點不好意思,爲了讓它與Repeater和ListView一起工作,從單個項目中創建一個列表。我知道它的工作原理。我知道這是一個簡單的解決方案。但是ASP.NET是一個框架,它看起來像是一個應該修復的遺漏。本文http://gadgetopia.com/post/5343涉及相同的概念,即有兩種基本方式可以查看網站上的內容:作爲單個項目和列表中的項目。仍然感到驚訝ASP.NET沒有類似於ItemView服務器控件的東西