为了账号安全,请及时绑定邮箱和手机立即绑定

如何正确命名和访问 Repeater 加载的元素 ID?

如何正确命名和访问 Repeater 加载的元素 ID?

紫衣仙女 2023-05-11 15:55:15
我正在创建一个拖放计划界面。用户可以将项目从右侧的选项卡列表拖到他们的日程表中。我使用中继器从 SQL Server 加载工作人员。我目前正在使用大量 EVAL 来设置元素 ID。我想知道这是否是一种好的做法,或者是否有更好的方法来设置 ID?我开发的下一步是由工作人员将表中的计划项目加载到每天,但我想在继续之前设置和理解 ID。之后,我将尝试在成功放置事件时触发 INSERT INTO 或 UPDATE(示例:UPDATE scheduleItems SET content = card text WHERE CrewID = xx AND date = xx)。这就是为什么我认为我的 ID 需要按顺序排列。我是 ASP.NET Web 窗体开发的新手,所以如果我的方法有问题请告诉我!这是我的船员中继器:<asp:Repeater ID="CrewRepeater" runat="server">    <ItemTemplate>        <div id="Crew<%# string.Format("{0}", Eval("CrewID"))%>" class="row">            <div class="board-layout">                <div class="left">                    <div class="board-text">                        Crew ID: <%# string.Format("{0}", Eval("CrewID"))%>                        <div id='CrewList<%# string.Format("{0}", Eval("CrewID"))%>' class="crew-board-list">                            <div id='Crew<%# string.Format("{0}", Eval("CrewID"))%>Employees' class="cardEmployee" data-toggle="modal" data-target="#DetailsModal" ondrop="dropIt(event)" ondragover="allowDrop(event)">                                <p><%# string.Format("{0}", Eval("Members"))%></p>                            </div>                            <div id='Crew<%# string.Format("{0}", Eval("CrewID"))%>Equipment' class="cardEquipment">                                <p><%# string.Format("{0}", Eval("Vehicles"))%></p>                            </div>                        </div>                    </div>                </div>
查看完整描述

1 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

好吧,从技术上讲,RepeaterControl 将自行管理 ID,如果您尝试连接更多唯一 ID 以使其更加独特,那将是已经解决的问题的开销。


看看你有没有Repeater这样一个简单的控件,里面有5个项目,我用一个简化的Repeater来解释一下:


<asp:Repeater runat="server" ID="MyRepeater">

    <ItemTemplate>

        <div runat="server" draggable="true" id="mySampleDiv"></div>

    </ItemTemplate>

</asp:Repeater>

然后,它将以这种方式管理 div,html就像这样:


<div draggable="true" id="MyRepeater_mySampleDiv_0"></div>

<div draggable="true" id="MyRepeater_mySampleDiv_1"></div>

<div draggable="true" id="MyRepeater_mySampleDiv_2"></div>

<div draggable="true" id="MyRepeater_mySampleDiv_3"></div>

<div draggable="true" id="MyRepeater_mySampleDiv_4"></div>

在id每一个div的属性中runat="server",它都有id的三部分来使它独一无二,


家长身份证

控件的ID

和项目索引

这意味着,这个问题,你正在努力连接 ids 将是一个开销,因为它总是唯一的。


现在,如果我们使用该属性,从jquery/中的元素获取船员 ID 的问题就非常简单,因为我认为此信息不是那么敏感。javascriptdata-


做这样的事情:


<asp:Repeater runat="server" ID="MyRepeater">

    <ItemTemplate>

        <div runat="server" draggable="true" id="mySampleDiv" class="mydiv" data-crewid='<%# Eval("CrewId") %>'></div>

    </ItemTemplate>

</asp:Repeater>

生成html的 withdata-crewid属性将是这样的:


<div draggable="true" id="MyRepeater_mySampleDiv_0" data-crewid="1000"></div>

<div draggable="true" id="MyRepeater_mySampleDiv_1" data-crewid="1001"></div>

<div draggable="true" id="MyRepeater_mySampleDiv_2" data-crewid="1002"></div>

<div draggable="true" id="MyRepeater_mySampleDiv_3" data-crewid="1003"></div>

<div draggable="true" id="MyRepeater_mySampleDiv_4" data-crewid="1004"></div>

这样,您就不需要管理元素的 ID,因为您主要关心的是获取crewid特定元素何时被拖放或放下的信息。


而在 中jquery,你可以这样得到它:


<script>

    $(document).ready(function(){

        $('.mydiv').on('dragstart', function(){

            var crewId = $(this).attr('data-crewid');

            // do something with the crewId

        });

    });

</script>

请注意,我已将事件与类绑定,而不是与 id 绑定,然后从属性中取回 crewid data-。


到目前为止,很明显 div 的 id 在我的情况下并不重要,因为我只需要 crewid (您的场景可能不同)或设置的任何 id,所以,而不是连接然后将 id 拆分为获取 crewid,我将 id 存储在一个data-属性中。哪个可以很好地存储您拥有的 ID。


阅读有关属性的详细信息data-:https://developer.mozilla.org/en-US/docs/Learn/HTML/Howto/Use_data_attributes


更新


如果你想从中的转发器中获取项目索引jquery,你也可以将它保存在另一个data-属性中,如下所示:


data-itemindex='<%# Container.ItemIndex %>'


查看完整回答
反对 回复 2023-05-11
  • 1 回答
  • 0 关注
  • 98 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信