ASP.Net 4.5引入将数据绑定到像通过SelectMethod属性的Repeater控制的新方法:
<asp:Repeater runat="server" ItemType="MyData.Reference"
SelectMethod="GetReferences">
调用代码隐藏方法
public IEnumerable<Reference> GetReferences()
在嵌套中继器的情况下,是有可能的参数传递给该select方法以某种方式,使得它根据外中继器的物品取出不同的数据?
例:
<asp:Repeater runat="server" ItemType="MyData.Reference"
SelectMethod="GetReferences(Item.ID)">
应该调用
public IEnumerable<Reference> GetReferences(int id)
我知道这是可以通过的ItemDataBound事件来实现,但我想用SelectMethod范围和项目类型的更简单,更清晰的语法。
是否SelectMethod允许参数传递不知何故?
如果没有,是否有另一种干净的方式我SelectMethod内得到外直放站项目的价值?
在等待答案,我打了一下周围,发现以下解决方案。
它可能不是这样做的最佳方式,但到目前为止,我发现它没有问题,这是非常straigtforward,所以我就扔在那里。
<asp:Repeater runat="server" ItemType="MyData.Reference"
DataSource='<%# GetReferences(Item.ID) %>'>
基本上我在这里做的是更换SelectMethod
与DataSource
(智能感知不会建议,但它仍然工作)。
这样我可以通过一个值GetReferences方法,然后用来模型绑定的返回值。
到目前为止,这是我遇到的最短的解决方案。
这里是你如何做到这一点:
在你的外中继,放置一个隐藏字段,并将其命名为内部中继器的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);
}
使用列表框时得到“的SelectedValue”在这种情况下valueprovider也可以乘坐PROPERTYNAME,有用的。
我发现你的问题,确实像你一样,那么我想这个解决方案,而不是它的作品一样好,但更清洁,更根据概念的想法,它似乎。
在看看练习1:模型的ASP.NET Web窗体绑定- >任务3 -在模型绑定值提供的教程。
它可以将SelectMethod签名中定义了某种控制选择参数。
您可以使用值提供
例:
public IQueryable<Category> GetCategories([Control]int? minProductsCount)
{
}
这是一个ValueProviders的列表:
CompositeValueProvider 。 代表值提供的值来自实现价值提供者的列表IEnumerable
接口。
QueryStringValueProvider表示该包含在查询字符串值提供NameValueCollection
对象。
RouteDataValueProvider表示一个包含在一个实现一个对象路径数据的值提供者IDictionary(Of TKey, TValue)
接口。
ControlValueProvider表示用于控制值的新价值。
CookieValueProvider表示cookie值的新价值。
FormValueProvider表示表单值的新价值。
ProfileValueProvider表示用于配置文件值的值供应商。
UserProfileValueProvider表示为用户配置文件的值供应商。
ViewStateValueProvider表示用于视图状态值的值提供者。