【问题标题】:Setting ID to a control inside repeater itemtemplate将 ID 设置为中继器项模板内的控件
【发布时间】:2011-02-03 08:36:18
【问题描述】:

在中继器的 itemtemplate 中,我有一个 Panel 服务器控件。
我需要为其分配特殊的 ID,因为我需要使用一些使用此 ID 的 javascript 函数。

在转发器 ItemDataBound 事件中我有这个:

pnlButtonsPanel.ID = pnlButtonsPanel.ID + DataBinder.Eval(e.Item.DataItem, "ID");

但是这个解决方案并不好,因为在回发之后页面被重新渲染并且我丢失了新 ID。 (而且我不想在每次回发后重新绑定转发器)

我尝试像这样在 aspx 页面上设置 ID:

<asp:Panel id='<%# Eval("ID") %>'

还有其他一些变体,但总是会出现编译错误。

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    在 asp.net 4.0 中你将能够做到这一点。

    这对现在不太有用...

    执行此操作的一种方法是将您的 id 分配为控件的 cssclass 属性,然后使用 jQuery 客户端找到它:

    <asp:Panel id='panel_thingy' cssclass='<%# Eval("ID") %>'
    
    $(".123")  // selector for panel with class (id) 123
    

    编辑:由于您没有使用 jQuery,这里还有两种可能性。首先,您可以使用普通的&lt;div&gt;(不要在标签中使用 runat="server")来代替 Panel 控件。然后你可以完全按照你想要的方式设置 id。

    或者,如果这对您不起作用,您可以在 ItemDataBound 事件处理程序中获取 Panel 的 ClientID 并将其存储在某种集合中(例如,键是项目 ID 的字典,并且值是面板 ClientID)。然后在填充中继器后,您会得到一个列表,您可以将其作为 javascript 数组(或一些 JSON 内容,或任何适合您的客户端编码需要的东西)写入客户端。

    【讨论】:

    • 抱歉,我没有使用 jquery,这无关紧要
    • div 控件必须是服务器控件,因为我还需要在代码隐藏中和他做点什么。
    • 那么我的第三个建议就是获取列表中的 ClientID 并向浏览器写入一些 javascript。
    • 将所有内容存储在一个集合中我认为这太过分了......这将是最后的手段
    • 好吧,祝你好运 - 我希望其他人能给你一个更好的主意
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    相关资源
    最近更新 更多