ASP.Net 4.5引入了通过SelectMethod属性将数据绑定到Repeater等控件的新方法:
<asp:Repeater runat="server" ItemType="MyData.Reference"
SelectMethod="GetReferences">调用Codebehind方法
public IEnumerable<Reference> GetReferences()在嵌套中继器的场景中,是否可以以某种方式将一个参数传递给这个select方法,以便它根据外部中继器的项获取不同的数据?
示例:
<asp:Repeater runat="server" ItemType="MyData.Reference"
SelectMethod="GetReferences(Item.ID)">应该打电话给我
public IEnumerable<Reference> GetReferences(int id)我知道这可以通过ItemDataBound事件来实现,但我想使用SelectMethod和ItemType更简单、更干净的语法。
SelectMethod允许以某种方式传递参数吗?
如果不是,有没有另一种干净的方法可以从我的SelectMethod中的外部Repeater项中获取值?
发布于 2012-10-10 02:57:23
在等待答案的过程中,我尝试了一下,找到了以下解决方案。
这可能不是最好的方法,但到目前为止,我还没有发现它有任何问题,而且它非常简单,所以我就把它扔出去。
<asp:Repeater runat="server" ItemType="MyData.Reference"
DataSource='<%# GetReferences(Item.ID) %>'>本质上,我在这里做的是用DataSource替换SelectMethod (智能感知不会建议这样做,但它仍然可以工作)。
这样,我就可以将一个值传递给GetReferences方法,然后将返回值用于模型绑定。
到目前为止,这是我遇到的最短的解决方案。
发布于 2013-02-15 21:31:47
下面是你如何做到这一点:
在外部中继器中,放置一个隐藏字段,并为内部中继器命名一个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“时很有用。
我找到了你的问题,像你一样做了,然后我尝试了这个解决方案,它同样有效,但看起来更干净,更符合概念的想法。
发布于 2012-10-10 02:15:48
请看一下Exercise 1: Model Binding in ASP.NET Web Forms -> Task 3 – Value Providers in Model Binding教程。
可以在SelectMethod签名中定义某种控制选择参数。
https://stackoverflow.com/questions/12804875
复制相似问题