如何为Repeater生成的项提供唯一的元素id
本文关键字:唯一 元素 id Repeater | 更新日期: 2023-09-27 18:12:31
我在ASP.Net中使用Repeater
。我正在访问数据库中的内容。html元素的每个id或类都是相同的。这是一个新的标题。有一个阅读按钮。
我想在新页面中打开一个标题的完整描述。
我有问题在分配唯一的id,从中我知道哪个标题被点击。
这是该部分的代码:
<div class="content">
<table>
<tr>
<td class="contl">
<div>
<asp:Repeater ID="RepCountry" runat="server" OnItemCommand="RepCountry_ItemCommand">
<ItemTemplate>
<div class="contentbox">
<div class="postheading">
<%#Eval("title")%>
</div>
<table>
<tr><td> <div class="postimage">
<img src="Admin/images/<%# Eval("img")%>" alt="" height="50%" width="100%" />
</div></td>
<td><div class="discp">
<div class="dpost">
<p style="font-family: Times New Roman">
<%#Eval("p_date")%></p>
</div>
<div class="discp_c">
<p>
<%# Eval("descr").ToString().Substring(0,200).ToString()%></p>
<p style="color: Maroon">
<a id="A1"+ href="Readmore.aspx?oid=" runat="server" onclick="changeid(this.id)">Read More.</a></p>
</div>
<div class="social">
<a href="">
<img src="images/t.png" alt="twtter" /></a> <a href="">
<img src="images/f.png" alt="facebook" /></a> <a href="">
<img src="images/g.png" alt="gmail" /></a> <a href="">
<img src="images/in.png" alt="linkedin" /></a>
</div>
</div></td></tr>
</table>
</div>
</ItemTemplate>
</asp:Repeater>
我看到你已经使用Eval在你的项目中插入了一个Description:
<div class="discp_c">
<p>
<%# Eval("descr").ToString().Substring(0,200).ToString()%></p>
<p style="color: Maroon">
...
如果我读的代码好,你至少读title, descr, img
的数据库查询?
如果是,那么确保查询也返回文章的ID(主键),并使用Eval
在链接中插入该ID。因此,如果数据库中文章的主键命名为articleID
,则从
SELECT xxx as title, yyy as descr, zzz as img ....
SELECT id as articleID, xxx as title, yyy as descr, zzz as img ....
那么你可以使用数据库提供的ID来创建一个到文章的完整链接:
<a runat='server' ....
href='Readmore.aspx?oid=<%# Eval("articleID").ToString()%>'
....>
...</a>
,因此Readmore.aspx
页面将确切地知道应该打开哪篇文章。它将直接作为oid
查询参数出现,不需要做额外的工作。
如果您确实需要它,您可以使用相同的技巧来生成该标记的HTML ID:
<a runat='server' ....
id='ID_<%# Eval("articleID").ToString()%>'
href='Readmore.aspx?oid=........'
....>
...</a>
,这样,<a>
标签将具有像ID_32131, ID_4532455, ID_1231455
一样的id,并且只要数据库查询返回唯一的文章,id将是唯一的。