ASP.Net 4.5 introduces new ways to bind data to controls like the Repeater through the SelectMethod property:
<asp:Repeater runat="server" ItemType="MyData.Reference"
SelectMethod="GetReferences">
calls the Codebehind method
public IEnumerable<Reference> GetReferences()
In the scenario of nested repeaters, is it possible to pass a parameter to this select method somehow, so that it fetches different data depending on the Item of the outer repeater?
Example:
<asp:Repeater runat="server" ItemType="MyData.Reference"
SelectMethod="GetReferences(Item.ID)">
should be calling
public IEnumerable<Reference> GetReferences(int id)
I know this can be achieved through ItemDataBound events, but I would like to use the much simpler and cleaner syntax of SelectMethod and ItemType.
Does the SelectMethod allow parameter passing somehow?
If not, is there another clean way to get the value from the outer Repeater Item within my SelectMethod?
While waiting for answers, I played around a bit and found the following solution.
It might not be the best way to do it, but so far I have found no problems with it and it's pretty straigtforward, so I'll just throw it out there.
<asp:Repeater runat="server" ItemType="MyData.Reference"
DataSource='<%# GetReferences(Item.ID) %>'>
Essentially what I do here is replace the SelectMethod
with DataSource
(Intellisense will not suggest it, but it works nonetheless).
This way I can pass a value to the GetReferences method and then uses the return value for model binding.
So far this is the shortest solution I came across.