Asp 控制转发器内的 Id 生成

2023-12-29

我在中继器 itemtemplate 中定义了一些控件,问题出在自动生成的 Id 上。

这是我的页面:

 <asp:Repeater ID="rptThreads" runat="server"           
           onitemcreated="rptThreads_ItemCreated">
        <HeaderTemplate>
           <table  cellpadding="0px" cellspacing="0">             
        </HeaderTemplate>

        <ItemTemplate>        
           <tr style="height:50px">            
             <td>
                <asp:PlaceHolder ID="plcItemTitle" runat="server">               
                  <asp:Panel id="titleContainer" runat="server" style="position:absolute;">
                     <asp:HyperLink  ID="lnkTitle" runat="server" style="float:left;padding-right:10px;" Text='<%# Container.DataItem%>'/>            
                     <asp:Panel id="pnlEditButtons" runat="server" Visible="false" style="vertical-align:middle;z-index:100;display:none;float:left;" >                                                                                        
                       <asp:ImageButton ID="imgbtn1" runat="server"  ImageUrl="~/Images/misc/edit.png"   />                   
                       <asp:ImageButton ID="imgbtn2" runat="server" ImageUrl="~/Images/misc/Rename.png" />                 
                     </asp:Panel>                           
                  </asp:Panel>               
               </asp:PlaceHolder>
            </td>              
           </tr>
        </ItemTemplate>        
        <FooterTemplate>
           </table> 
        </FooterTemplate> 
    </asp:Repeater>

现在我将尝试描述问题:

代码隐藏:

 protected void Page_Load(object sender, EventArgs e)
    {
       int [] array = {1,2,3,4,5};
       rptThreads.DataSource = array;
       rptThreads.DataBind();     
    }

    protected void rptThreads_ItemCreated(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item ||
               e.Item.ItemType == ListItemType.AlternatingItem)
        {

            Panel editButtonsPanel = e.Item.FindControl("pnlEditButtons") as Panel;
            editButtonsPanel.Visible = true;
            Panel containerPanel = e.Item.FindControl("titleContainer") as Panel;

           //Point of Interest!!!!
           containerPanel.Attributes.Add("onmouseover", "ShowEditButtons('" + editButtonsPanel.ClientID + "');");
         }


    }

如果我按原样运行页面,生成的 html 将如下(我仅显示前 2 项):

  <table  cellpadding="0px" cellspacing="0">                            
           <tr style="height:50px">            
             <td>
                <div id="titleContainer" onmouseover="ShowEditButtons('pnlEditButtons');" style="position:absolute;">   
                     <a id="lnkTitle" style="float:left;padding-right:10px;">1</a>            
                     <div id="pnlEditButtons" style="vertical-align:middle;z-index:100;display:none;float:left;">                                                                                               
                       <input type="image" name="imgbtn1" id="imgbtn1" src="Images/misc/edit.png" style="border-width:0px;" />                   
                       <input type="image" name="imgbtn2" id="imgbtn2" src="Images/misc/Rename.png" style="border-width:0px;" />                                      
                    </div>                                             
                </div>
            </td>              
           </tr>

           <tr style="height:50px">            
             <td>
                <div id="titleContainer" onmouseover="ShowEditButtons('pnlEditButtons');" style="position:absolute;">

                     <a id="lnkTitle" style="float:left;padding-right:10px;">2</a>            
                     <div id="pnlEditButtons" style="vertical-align:middle;z-index:100;display:none;float:left;">                                                                                               
                       <input type="image" name="imgbtn1" id="imgbtn1" src="Images/misc/edit.png" style="border-width:0px;" />                   
                       <input type="image" name="imgbtn2" id="imgbtn2" src="Images/misc/Rename.png" style="border-width:0px;" />                                      
                        </div>                                             
                 </div>
              </td>              
           </tr>

正如你所看到的,所有 div 都有相同的 ID,这是我不想要的!!!

但是如果我从 Item Created 事件中省略这一行:

 containerPanel.Attributes.Add("onmouseover", "ShowEditButtons('" + editButtonsPanel.ClientID + "');");

生成的 HTML 如下:

<table  cellpadding="0px" cellspacing="0">                            
           <tr style="height:50px">            
             <td>
                <div id="rptThreads_ctl01_titleContainer" style="position:absolute;">

                     <a id="rptThreads_ctl01_lnkTitle" style="float:left;padding-right:10px;">1</a>            
                     <div id="rptThreads_ctl01_pnlEditButtons" style="vertical-align:middle;z-index:100;display:none;float:left;">

                       <input type="image" name="rptThreads$ctl01$imgbtn1" id="rptThreads_ctl01_imgbtn1" src="Images/misc/edit.png" style="border-width:0px;" />                   
                       <input type="image" name="rptThreads$ctl01$imgbtn2" id="rptThreads_ctl01_imgbtn2" src="Images/misc/Rename.png" style="border-width:0px;" />                                      
                </div>                                             
              </div>
            </td>              
           </tr>                
           <tr style="height:50px">            
             <td>
                <div id="rptThreads_ctl02_titleContainer" style="position:absolute;">   
                     <a id="rptThreads_ctl02_lnkTitle" style="float:left;padding-right:10px;">2</a>            
                     <div id="rptThreads_ctl02_pnlEditButtons" style="vertical-align:middle;z-index:100;display:none;float:left;">

                       <input type="image" name="rptThreads$ctl02$imgbtn1" id="rptThreads_ctl02_imgbtn1" src="Images/misc/edit.png" style="border-width:0px;" />                   
                       <input type="image" name="rptThreads$ctl02$imgbtn2" id="rptThreads_ctl02_imgbtn2" src="Images/misc/Rename.png" style="border-width:0px;" />                                      
                        </div>                                             
                </div>
             </td>              
           </tr>

所有div都得到唯一的 ID,这是我想要的

我的问题是:
1)为什么会发生?为什么这行代码弄乱了 ids?
2)如何拥有唯一的ID并在代码隐藏中分配javascript?
我可以将其添加到 aspx 上(它会起作用并且我将获得唯一的 id):

 onmouseover='<%# "javascript:ShowEditButtons(\""+ Container.FindControl("pnlEditButtons").ClientID+ "\");" %>' 

但我必须在代码隐藏中执行此操作,因为仅当服务器验证某些内容时我才需要设置 javascript。


至于为什么会发生这种情况我不太确定。我怀疑它可能知道您使用了 ClientID,因此在渲染 HTML 时它没有根据命名容器更改它。

至于如何解决该问题,请不要将 ID 传递给 javascript 函数。当 JavaScript 中的事件触发时,事件对象将被传递给 Firefox 的函数,IE 有一个显式的 windows.event 对象。事件对象将具有对触发事件的对象的引用,然后您可以使用该引用来访问 ID,但我的猜测是您无论如何都会使用 ID 来获取对元素的引用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Asp 控制转发器内的 Id 生成 的相关文章

随机推荐

  • iOS - 尝试播放 mp3 文件失败

    我正在尝试播放从我的应用程序的服务器检索的 mp3 文件 执行以下操作 IBAction play UIButton sender dispatch queue t downloadQueue dispatch queue create a
  • 使用 Python 将 .csv 文件分成块

    我有一个超过 300 GB 的大型 csv 文件 我想将其分成每个 100 000 000 行的较小文件 每行大约有 55 60 字节 我写了以下代码 import pandas as pd df pd read csv path to r
  • 模态视图控制器和 DefinePresentationContext 的问题

    我使用以下命令创建了一个自定义容器视图控制器新的 UIViewController 容器视图控制器方法 http developer apple com library ios documentation uikit reference U
  • Google Analytics 上是否有设置禁止尚未同意的用户使用 cookie

    根据欧盟电子隐私指令 又名 Cookie 法 第 5 3 条 针对欧盟用户的网站在设置 Cookie 之前必须获得用户的选择同意 See ICO 指导 http www ico gov uk media documents library
  • 在 R Shiny Dashboard 中的反应函数中返回数据帧

    使用闪亮的仪表板 ui r server r 和多个包含函数的 r 脚本 基本问题是 我有两个数据集带入 server r 中 并将它们传递给准备 清理数据集的函数 然后将它们绑定在一起并应返回完整的数据帧 数据帧应该是反应性的 这是我到目
  • python scipy/numpy 中的多项式 pmf

    scipy numpy 中是否有内置函数用于获取多项式的 PMF 我不确定是否binom以正确的方式概括 例如 Attempt to define multinomial with n 10 p 0 1 0 1 0 8 rv scipy s
  • rustup 将自身安装到哪里?

    我明白那个rustup安装rustc and cargo二进制文件到 cargo bin 但是它安装在哪里rustup可执行到 据我所知 任何文档中都没有对此进行解释 并且运行安装程序也不会告诉您 如果可能的话 我想避免将其安装到除我的主目
  • ASP.NET 代码块(例如 <%= %>)在页面生命周期中何时执行?

    当我对整个页面进行数据绑定时 我会执行以下操作 巴拉巴拉 这效果很好 但是 我通常不会对整个页面使用数据绑定 而是以 经典 ASP NET 方式编写内容 例如 在后面的代码中我将有类似的内容 lblSomeMessage Text Some
  • 在表单的 clean 方法期间读取文件数据

    所以 我正在努力实现答案我之前的问题 https stackoverflow com questions 2798670 processing file uploads before object is saved 这是我的模型 class
  • Visual Studio 2010 警告:未指定的错误(HRESULT 异常:0x80004005 (E_FAIL))

    我看到很多关于此错误的帖子 但似乎都与我的情况无关 我有一个小型解决方案 包含 2 个 winforms 应用程序和一个数据访问 DLL 我使用的是 VS2010 SP1 当我在 Vista Business 32 位 SP1 笔记本电脑上
  • 如何使用引导网格映射图像数组?

    我正在使用 gatsby js 构建一个投资组合网站 所有照片都发布在 WordPress 中 由 graphQL 获取并渲染到网站 我正在尝试使用 bootstrap grid 来组织照片并使其响应 但是因为 graphQL 返回一个数组
  • 为整个应用程序创建一个公共对象

    我创建了一项活动 用于创建用户个人资料并存储其信息 例如姓名 ID 个人资料图片等 该信息是唯一的 应该在应用程序的所有活动中使用 我想知道创建一个存储所有信息并在所有活动中使用它的通用对象的最佳方法是什么 我已阅读有关捆绑包和 JSON
  • Python - 使用 SAML 2.0 登录站点

    我很难找到资源来帮助我解决我遇到的问题 我有一个使用 SAML 2 0 保护的网站 有人可以向我指出显示如何使用 SAML 2 0 登录站点的资源吗 大多数 python 模块似乎都与实现 SAML 2 有关 我只需要登录到实现 SAML
  • 如何解析 REST 服务的 POST 参数?

    看来我还有另一个 JSON 问题 这次是在发布到 REST 服务时 我在用Flask Restful api add resource Records rest records
  • 如何使用 rand-int 生成可重复的随机序列

    我希望能够使用生成可重复的数字rand在 Clojure 中 具体来说 我想要调用的结果rand nth或Incanter的sample可重复 这些称为rand int这又调用rand 我想通了这个问题 https stackoverflo
  • 如何从静态方法访问控件?

    我有一个 C NET 应用程序 其中有一个MainForm和几节课 这些类之一接收来自网络的传入数据消息 我需要将这些消息的文本附加到多行文本框中MainForm 我可以将消息发送到中的方法MainForm通过使方法静态 但静态方法无法访问
  • 两个交互类的基于可变参数模板的多重继承...

    在我当前的项目中 我需要能够提供基于模板的多重继承 Mixin 模式 and有两个可以一起交互的类 具有镜像多重继承树 即一个类在同一继承级别使用另一个类的方法 长话短说 我似乎找不到一种优雅的方式来构建它 下面是一个简化的测试用例 您可以
  • 设置参考号并将其与文本文件中的其他数据进行比较

    该项目基于眼动仪 让我简要介绍一下该项目背后的想法 以便更好地理解我的问题 我有 Tobii C 眼动仪的硬件 这个眼动仪将能够给出我正在看的地方的 X Y 坐标 但这个装置非常敏感 当我看 1 个点时 眼动仪会发出许多不同的坐标数据 但在
  • Rails 应用程序内的 AMQP 订阅者

    是否可以使用我的 Rails 应用程序启动 AMQP 订阅者 可能通过初始化程序或其他东西 我想让它同时运行 也可以与 Rails 模型交互 下面是我的意思的伪代码示例 queue subscribe do msg body Foo cre
  • Asp 控制转发器内的 Id 生成

    我在中继器 itemtemplate 中定义了一些控件 问题出在自动生成的 Id 上 这是我的页面