mag*_*tic 12 c# asp.net data-binding repeater asp.net-4.5
ASP.Net 4.5引入了通过SelectMethod属性将数据绑定到Repeater等控件的新方法:
<asp:Repeater runat="server" ItemType="MyData.Reference"
SelectMethod="GetReferences">
Run Code Online (Sandbox Code Playgroud)
调用Codebehind方法
public IEnumerable<Reference> GetReferences()
Run Code Online (Sandbox Code Playgroud)
在嵌套转发器的场景中,是否可以以某种方式将参数传递给此select方法,以便根据外转发器的Item获取不同的数据?
例:
<asp:Repeater runat="server" ItemType="MyData.Reference"
SelectMethod="GetReferences(Item.ID)">
Run Code Online (Sandbox Code Playgroud)
应该打电话
public IEnumerable<Reference> GetReferences(int id)
Run Code Online (Sandbox Code Playgroud)
我知道这可以通过ItemDataBound事件来实现,但我想使用SelectMethod和ItemType更简单,更简洁的语法.
SelectMethod是否允许参数以某种方式传递?
如果没有,是否有另一种干净的方法从我的SelectMethod中的外部Repeater项中获取值?
在等待答案时,我玩了一下,找到了以下解决方案.
它可能不是最好的方法,但到目前为止,我发现它没有任何问题,而且非常简单,所以我只是把它扔出去.
<asp:Repeater runat="server" ItemType="MyData.Reference"
DataSource='<%# GetReferences(Item.ID) %>'>
Run Code Online (Sandbox Code Playgroud)
基本上我在这里做的是替换SelectMethod
with DataSource
(Intellisense不会建议它,但它仍然有效).
这样我可以将值传递给GetReferences方法,然后使用返回值进行模型绑定.
到目前为止,这是我遇到的最短的解决方案.
这是你如何做到的:
在外部中继器中,放置一个隐藏字段,并为内部中继器命名一个选择方法:
<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>
Run Code Online (Sandbox Code Playgroud)
然后,这里有一个记录不太好的魔术:
public IQueryable<SubItem> GetSubItems([Control("ItemId")] int itemId)
{
return yourDataStore.GetSubItems(itemId);
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,valueprovider也可以使用属性名,在使用列表框获取"SelectedValue"时非常有用.
我找到了你的问题,按照你的方式做了,然后我尝试了这个解决方案,但是效果更好,但更清洁,更符合概念的想法,似乎.
归档时间: |
|
查看次数: |
6882 次 |
最近记录: |