asp.net 是否可以将值传递给Repeater的SelectMethod?

juud5qan  于 2023-08-08  发布在  .NET
关注(0)|答案(5)|浏览(179)

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项获取值?

9avjhtql

9avjhtql1#

在等待答案的时候,我稍微玩了一下,找到了下面的解决方案。
这可能不是最好的方法,但到目前为止,我还没有发现它的问题,而且它是相当直接的,所以我就把它扔在那里。

<asp:Repeater runat="server" ItemType="MyData.Reference" 
     DataSource='<%# GetReferences(Item.ID) %>'>

字符串
本质上,我在这里所做的是用DataSource替换SelectMethod(IntelliSense不会建议它,但它仍然可以工作)。
通过这种方式,我可以将值传递给GetReferences方法,然后将返回值用于模型绑定。
到目前为止,这是我遇到的最短的解决方案。

gojuced7

gojuced72#

下面是你如何做到这一点:
在外部中继器中,放置一个隐藏字段,并为内部中继器命名一个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还可以使用propertyname,这在使用列表框获取“SelectedValue”时很有用。
我发现了你的问题,做了你所做的,然后我尝试了这个解决方案,而不是工作一样好,但更干净,更根据概念的想法,它似乎.

ao218c7q

ao218c7q4#

您可以使用价值提供者
范例:

public IQueryable<Category> GetCategories([Control]int? minProductsCount)
{
}

字符串
这是ValueProviders的列表:

相关问题