ASP.Net 4.5引入了通过SelectMethod属性将数据绑定到Repeater等控件的新方法:
<asp:Repeater runat="server" ItemType="MyData.Reference"
SelectMethod="GetReferences">
调用Codebehind方法
public IEnumerable<Reference> GetReferences()
在嵌套转发器的场景中,是否可以以某种方式将参数传递给此select方法,以便根据外部转发器的Item获取不同的数据?
示例:
<asp:Repeater runat="server" ItemType="MyData.Reference"
SelectMethod="GetReferences(Item.ID)">
应该致电
public IEnumerable<Reference> GetReferences(int id)
我知道这可以通过ItemDataBound事件来实现,但我想使用SelectMethod和ItemType更简单,更简洁的语法。
SelectMethod是否允许参数以某种方式传递?
如果没有,是否有另一种干净的方法从我的SelectMethod中获取外部Repeater项的值?
答案 0 :(得分:8)
在等待答案时,我玩了一下,找到了以下解决方案。
这可能不是最好的方法,但到目前为止,我发现它没有任何问题,而且非常简单,所以我只是把它扔出去。
<asp:Repeater runat="server" ItemType="MyData.Reference"
DataSource='<%# GetReferences(Item.ID) %>'>
基本上我在这里做的是用SelectMethod
替换DataSource
(Intellisense不会建议它,但它仍然有用)。
这样我可以将值传递给GetReferences方法,然后使用返回值进行模型绑定。
到目前为止,这是我遇到的最短解决方案。
答案 1 :(得分:5)
以下是您的操作方法:
在外部中继器中,放置一个隐藏字段,并为内部中继器命名一个选择方法:
<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”时非常有用。
我找到了你的问题,按照你的方式做了,然后我尝试了这个解决方案,但效果更好,但更清晰,更符合概念的想法,似乎。
答案 2 :(得分:2)
查看Exercise 1: Model Binding in ASP.NET Web Forms -> Task 3 – Value Providers in Model Binding教程。
可以在SelectMethod签名中定义某种控制选择参数。
答案 3 :(得分:1)
您可以使用价值提供商
示例:
public IQueryable<Category> GetCategories([Control]int? minProductsCount)
{
}
这是ValueProviders的列表:
CompositeValueProvider。表示一个值提供程序,其值来自实现IEnumerable
接口的值提供程序列表。
QueryStringValueProvider表示NameValueCollection
对象中包含的查询字符串的值提供程序。
RouteDataValueProvider表示实现IDictionary(Of TKey, TValue)
接口的对象中包含的路由数据的值提供程序。
ControlValueProvider表示控件值的值提供程序。
CookieValueProvider表示Cookie值的值提供程序。
FormValueProvider表示表单值的值提供程序。
ProfileValueProvider表示个人资料值的值提供者。
UserProfileValueProvider表示用户个人资料的值提供者。
ViewStateValueProvider表示视图状态值的值提供程序。