【问题标题】:Pass new parameter to function called in OnItemDataBound event将新参数传递给 OnItemDataBound 事件中调用的函数
【发布时间】:2012-04-13 17:51:32
【问题描述】:

我对 OnItemDataBound 事件有疑问,希望有人能帮助我。

我现在有

函数定义为:

protected void FillRepeater(object sender, RepeaterItemEventArgs e)

我想做的是将参数传递给函数,如下所示:

但我不确定这可能吗? 我已将函数定义编辑为

protected void FillRepeater(object sender, RepeaterItemEventArgs e, int num)

但我不确定如何编辑标记以传递前 2 个预期参数?

【问题讨论】:

    标签: c# asp.net repeater


    【解决方案1】:

    您无法修改 ASP.NET 服务器控件事件处理程序的签名,但我怀疑您正在尝试传递当前项的索引或从当前项中获取属性。如果这是您的目标,以下几行可能会对您有所帮助:

    protected void FillRepeater(object sender, RepeaterItemEventArgs e)
    {
        // this will get the object that the current repeater item is bound to
        YourItemType item = e.Item.DataItem as YourItemType;
    
        // this will get the index of the current repeater item
        var collection = repeater.DataSource as List<YourItemType>;
        int itemIndex = collection.IndexOf(e.Item.DataItem as YourItemType);
    }
    

    【讨论】:

    • 感谢您的回复。实际上,我想根据我控制的页面传递一些参数。转发器绑定到一个 XML 文件,我可能只希望在 1 页上显示来自数据源的几个项目,我可以将其直接匹配到 XML 文件中的一个元素。
    • 我明白了,您是否可以将页面参数放入 HiddenField 中,然后从那里读取值?如果不是,我们可能需要更多关于您的总体目标的描述。
    • 我有 4 个 aspx 页面,每个页面都有一个转发器,并且数据绑定到一个 XML 文件。但是,我实际上并不想在任何一页上显示该 XML 文件的完整数据,而只是显示其中的一部分。所以在每个页面后面的代码中,在处理 OnItemDataBound 事件的函数中几乎完全相同,除了这两行: string sectionText = DataBinder.Eval(e.Item.DataItem,"section").ToString() ; if (sectionText.Equals("EnvironmentalScan")){....} 我认为如果我将其创建为一个类并传递一个字符串参数会更好。
    • 感谢您的帮助,您最后的评论很有道理,我可以在中继器中添加一个隐藏标签,并在该隐藏标签的文本中传递我需要的任何参数。
    • 酷,是的,考虑一下这个问题,我认为这将是最直接的方法,祝你好运!
    【解决方案2】:

    您可以使用e.Item 在中继器中查找控件。如果需要,您可以调用父级以获取中继器上方的对象。 我所做的是将我想要传递的数据放入隐藏字段并按原样检索它们

    Dim hListID As HiddenField = e.Item.FindControl("hListID")
    

    【讨论】:

      猜你喜欢
      • 2019-08-09
      • 1970-01-01
      • 2010-10-04
      • 2014-06-26
      • 2019-09-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多