【问题标题】:How to get at repeater Item from jQuery如何从 jQuery 获取中继器项目
【发布时间】:2010-01-05 19:42:09
【问题描述】:

我在页面上有一个中继器。中继器实际上位于 .ascx 中。在转发器中,每个项目都有一些东西,例如添加按钮和其他几个字段。

我正在尝试 Container.DataItem 但与单击的添加按钮相关的内容。如果用户单击中继器列表中的添加按钮,请为我提供与用户刚刚单击的 ItemTemplate 中的按钮相关的 Container.DataItem 的引用。

添加按钮实际上只是一个包裹在常规 HTML 图像周围的常规 HTML 超链接。我在超链接中添加了一个 ID,但不知道如何真正链接这两者并获得对 DataItem 的引用。

我已经准备好了,可以使用 jQuery 做任何我想做的客户端工作。

我开始的例子:

<script type="text/javascript">

$(document).ready(function()
{
    $(myUserControl.MyRepeater).
}

</script>

【问题讨论】:

    标签: asp.net jquery


    【解决方案1】:

    转发器不生成任何自己的 HTML。它只会写你告诉它写的东西。

    因此,您必须以某种方式识别每个项目,最好在 HTML 中使用唯一的 id。这样您就可以通过 DOM 访问它。

    例如,如果呈现的标记看起来像这样,那么您实际上可以通过 jquery 访问“item1”:

    <div id="item1">abc</div>
    <div id="item2">def</div>
    

    要做到这一点,你可以在你的 ItemTemplate 中尝试这样的事情:

    <ItemTemplate>
      <div id="item<%#Container.ItemIndex %>">bla</div>
    </ItemTemplate>
    

    【讨论】:

    • 对,好的,那么我将如何将正确的 Container.ItemIndex 与单击的右侧添加按钮链接起来?我想我还必须将这种 id 添加到 超链接,然后以某种方式检查我的 jQuery 中的匹配项?
    • 好的,那么我可能需要为我在中继器中未向用户显示的任何字段添加一个隐藏字段,例如我的容器 ID,这是我稍后需要的在用户单击添加按钮后,在我的 jQuery 中。所以只要我有 id="itemID" 并且在我的超链接中 id="addButton" 我可以获取 ItemIndex 并通过搜索来搜索隐藏的 itemID在点击的超链接中的 itemID 和 Container.Index 上,我想这将是最好的方法,除非其他人有更好的主意。
    • 好吧,您可能会想出一些涉及聪明的 jQuery 选择器和单击事件的东西。如果没有看到一些代码,我很难想象那会是什么。
    • 另一件事,如果每个超链接都有 id="addButton" 那么如果用户单击该超链接,您如何知道用户单击了哪个?我看不出 jQuery 是如何知道要作用于哪个超链接的。
    【解决方案2】:

    Repeater 和 DataItems 是服务器端控件,可从页面/控件的代码隐藏中获得。您无法从客户端代码 (javascript) 访问它。

    【讨论】:

    • 好的,那么问题仍然是我如何将列表中的那个按钮与其相应的数据链接起来......这很难考虑,尤其是当 ASP.NET 在所有内容上创建愚蠢的奇怪 ID 时.
    • WebForms 创建了这些 ID,这在事件驱动的 WebForms 上下文中非常有意义。
    • 那些在 asp.net 中生成的 ID 很糟糕。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多