2012-10-09 75 views
12

ASP.Net 4.5引入將數據綁定到控制像通過SelectMethod屬性的Repeater新途徑:是否可以將值傳遞給Repeater的SelectMethod?

<asp:Repeater runat="server" ItemType="MyData.Reference" 
     SelectMethod="GetReferences"> 

調用代碼隱藏方法

public IEnumerable<Reference> GetReferences() 

在嵌套中繼器的情況下,是有可能以某種方式將參數傳遞給此選擇方法,以便根據外部中繼器的項目獲取不同的數據?

例子:

<asp:Repeater runat="server" ItemType="MyData.Reference" 
     SelectMethod="GetReferences(Item.ID)"> 

應該調用

public IEnumerable<Reference> GetReferences(int id) 

我知道這是可以通過的ItemDataBound事件來實現,但我想用SelectMethod範圍和項目類型的更簡單,更清晰的語法。

SelectMethod是否允許參數以某種方式傳遞?

如果沒有,是否有另一個乾淨的方法來從我的SelectMethod中的外部Repeater項目獲取值?

+1

+1好問題 - 即時消息感興趣。 – JonH

回答

8

在等待答案時,我玩了一下,發現了以下解決方案。

它可能不是這樣做的最佳方式,但到目前爲止,我發現它沒有問題,這是非常straigtforward,所以我就扔在那裏。

<asp:Repeater runat="server" ItemType="MyData.Reference" 
    DataSource='<%# GetReferences(Item.ID) %>'> 

基本上我在這裏做的是更換SelectMethodDataSource(智能感知不會建議,但它仍然工作)。

這樣我可以傳遞一個值到GetReferences方法,然後使用對模型綁定的返回值。

到目前爲止,這是我遇到的最短的解決方案。

1

您可以使用值提供

例子:

public IQueryable<Category> GetCategories([Control]int? minProductsCount) 
{ 
} 

這ValueProviders的列表:

5

這裏是你如何做到這一點:

在你的外中繼,放置一個隱藏字段,並將其命名爲內部中繼器的selectmethod:

<asp:Repeater SelectMethod="GetTopLevelStuff"> 
    <ItemTemplate>  
     <asp:HiddenField runat="server" ID="ItemId" Value="<%# Item.ID %>"/> 
     <asp:Repeater SelectMethod="GetSubItems"> 
      <ItemTemplate>Template code for sub-items here</ItemTemplate 
     </asp:Repeater> 
    </ItemTemplate 
</asp:Repeater> 

然後,這裏是不那麼良好記錄魔:

public IQueryable<SubItem> GetSubItems([Control("ItemId")] int itemId) 
    { 
     return yourDataStore.GetSubItems(itemId); 
    } 

在這種情況下,valueprovider也可以用列表框時得到「的SelectedValue」採取PROPERTYNAME,有用的。

我找到了你的問題,就像你那樣做了,然後我嘗試了這個解決方案,它的工作原理也一樣好,但是根據這個概念的想法,它看起來更清潔更多。

+0

有趣。我不喜歡,但是你生成的標記對客戶端或後續回發基本沒用。 – magnattic

+0

你的意思是ItemID控件本身?如果你想避免無用的標記,我會離開WebForms並開始查看asp.net MVC或使用Knockout.js - 那麼你實際上可以控制你的標記。不過,我明白你的意思了。 – LavaEater

+0

@LavaEater貢獻很大,像魅力一樣工作! –

相關問題