ASP.NET 4.5引入了通过SelectMethod属性将数据绑定到Repeater等控件的新方法:
<asp:Repeater runat="server" ItemType="MyData.Reference"
SelectMethod="GetReferences">
字符串
调用Codebehind方法
public IEnumerable<Reference> GetReferences()
型
在嵌套中继器的场景中,是否可以通过某种方式将参数传递给这个选择方法,以便它根据外部中继器的Item获取不同的数据?
范例:
<asp:Repeater runat="server" ItemType="MyData.Reference"
SelectMethod="GetReferences(Item.ID)">
型
应该在打电话
public IEnumerable<Reference> GetReferences(int id)
型
我知道这可以通过ItemDataBound事件来实现,但我希望使用更简单、更清晰的SelectMethod和ItemType语法。
SelectMethod是否以某种方式允许参数传递?
如果没有,是否有其他干净的方法从SelectMethod中的外部Repeater项获取值?
5条答案
按热度按时间9avjhtql1#
在等待答案的时候,我稍微玩了一下,找到了下面的解决方案。
这可能不是最好的方法,但到目前为止,我还没有发现它的问题,而且它是相当直接的,所以我就把它扔在那里。
字符串
本质上,我在这里所做的是用
DataSource
替换SelectMethod
(IntelliSense不会建议它,但它仍然可以工作)。通过这种方式,我可以将值传递给GetReferences方法,然后将返回值用于模型绑定。
到目前为止,这是我遇到的最短的解决方案。
gojuced72#
下面是你如何做到这一点:
在外部中继器中,放置一个隐藏字段,并为内部中继器命名一个selectmethod:
字符串
下面是一个不那么有据可查的魔术:
型
在这种情况下,valueprovider还可以使用propertyname,这在使用列表框获取“SelectedValue”时很有用。
我发现了你的问题,做了你所做的,然后我尝试了这个解决方案,而不是工作一样好,但更干净,更根据概念的想法,它似乎.
vmjh9lq93#
看看Exercise 1: Model Binding in ASP.NET Web Forms -> Task 3 – Value Providers in Model Binding教程。
可以在SelectMethod签名中定义某种控制选择参数。
ao218c7q4#
您可以使用价值提供者
范例:
字符串
这是ValueProviders的列表:
IEnumerable
接口的值提供程序列表。NameValueCollection
对象中包含的查询字符串的值提供程序。IDictionary(Of TKey, TValue)
接口的对象中包含的路由数据的值提供程序。oug3syen5#
我认为
SelectArguments
属性的存在正是为了这个目的:https://learn.microsoft.com/en-us/dotnet/api/system.web.ui.webcontrols.repeater.selectarguments?view=netframework-4.8.1